Haskell:如何打印用逗号分隔的列表的每个元素

时间:2016-04-08 14:35:53

标签: list haskell

我正在尝试用逗号打印列表。 我有["1","2","3"]之类的列表,我想打印1,2,3 我怎么能这样做?

我试过了:

printList xs = mapM_ (\(a) -> do
                      putStr a
                      putStr (",")) xs

但我不知道如何删除最后一个逗号。

2 个答案:

答案 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 - 符号。