use*_*403 1 haskell user-input output
我需要在powerset中打印元素.现在我的代码的输出是这样的:
"a"
"ab"
"b"
"x"
"xy"
"xyz"
"xz"
"y"
"yz"
"z"
Run Code Online (Sandbox Code Playgroud)
但是,我需要输出没有引号,如下所示:
a
ab
b
x
xy
xyz
xz
y
yz
z
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的.如何解决它才能获得正确的输出?
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
Run Code Online (Sandbox Code Playgroud)
首先,通过eta减少(\x -> f x)相当于普通f(在几乎所有情况下).所以,你可以重写mapM (\x -> print x)为mapM print.
要删除引号,应使用函数putStrLn而不是print函数.引号print来自print = putStrLn . show.show是一种以可以(如果定义了合适的实例)回读的方式打印出值的函数read.因此,字符串上的引号,您不希望(或需要)用于您的用例.