Haskell打印字符串标准输出

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)

krz*_*z00 6

首先,通过eta减少(\x -> f x)相当于普通f(在几乎所有情况下).所以,你可以重写mapM (\x -> print x)mapM print.

要删除引号,应使用函数putStrLn而不是print函数.引号print来自print = putStrLn . show.show是一种以可以(如果定义了合适的实例)回读的方式打印出值的函数read.因此,字符串上的引号,您不希望(或需要)用于您的用例.