我正在尝试用逗号打印列表。
我有["1","2","3"]
之类的列表,我想打印1,2,3
我怎么能这样做?
我试过了:
printList xs = mapM_ (\(a) -> do
putStr a
putStr (",")) xs
但我不知道如何删除最后一个逗号。
答案 0 :(得分:4)
您可以使用intercalate
。它会在列表的每个元素之间插入逗号,并连接生成的字符串列表,将其转换为单个字符串。
import Data.List
toCommaSeparatedString :: [String] -> String
toCommaSeparatedString = intercalate ","
ghci> toCommaSeparatedString ["1","2","3"]
"1,2,3"
答案 1 :(得分:4)
这有点像XY problem:正如Benjamin Hodgson所说,你最好把你的列表变成一个字符串,而然后打印出来 - 你想要尽可能多的尽可能在IO monad的逻辑外部。
但是,当然,即使如果你的问题从一开始就有些错误的方向,它就有了答案!例如,您可以写下这个:
printList :: [String] -> IO ()
printList [] = return ()
printList [x] = putStr x
printList (x:xs) = do
putStr x
putStr ","
printList xs
本杰明的回答是更好。但是这个可能会更清楚地阐明IO
monad代码和do
- 符号。