我需要在powerset中打印元素。现在我的代码输出是这样的:
"a"
"ab"
"b"
"x"
"xy"
"xyz"
"xz"
"y"
"yz"
"z"
但是,我需要输出没有引号,如下所示:
a
ab
b
x
xy
xyz
xz
y
yz
z
这就是我所拥有的。如何解决它才能获得正确的输出?
import Data.List
powerset = foldr (\x acc -> acc ++ map (x:) acc) [[]]
main = do
numCases <- getLine
repl $ (read numCases :: Int)
repl num = do
if(num == 0) then return ()
else do
size <- getLine
input <- getLine
let ret = tail $ sort $ powerset input
mapM (\x -> print x) ret
repl $ num-1
答案 0 :(得分:6)
首先(\x -> f x)
相当于普通f
(在几乎所有情况下)通过eta-reduction。因此,您可以将mapM (\x -> print x)
重新写为mapM print
。
要删除引号,您应使用函数putStrLn
而不是print
函数。 print
中的引号来自print = putStrLn . show
。 show
是一个函数,它以一种可以(如果定义了合适的实例)的方式打印出值read
。因此,字符串上的引号,您不希望(或需要)用于您的用例。