2013-11-28 79 views
1

我需要打印powerset中的元素。现在我的代码的输出是这样的:Haskell打印字符串标准输出

"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 

回答

6

首先(\x -> f x)相当于普通f(在几乎所有情况下)通过ETA-还原。因此,您可以将mapM (\x -> print x)重写为mapM print

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

+0

putStrLn做到了。感谢您的解释。 – user3025403

相关问题