2013-11-28 196 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

相關問題