List Haskell:如何打印列表中以逗号分隔的每个元素
我正在尝试用逗号打印列表。 我有类似于[1,2,3]的列表,我想打印1,2,3 我该怎么做 我试过:List Haskell:如何打印列表中以逗号分隔的每个元素,list,haskell,List,Haskell,我正在尝试用逗号打印列表。 我有类似于[1,2,3]的列表,我想打印1,2,3 我该怎么做 我试过: printList xs = mapM_ (\(a) -> do putStr a putStr (",")) xs 但是我不知道如何删除最后一个逗号。您可以使用。它将在列表的每个元素之间插入逗号,并连接生成的字符串列表以将其转换为单个字符串 import Data.List toCommaSepa
printList xs = mapM_ (\(a) -> do
putStr a
putStr (",")) xs
但是我不知道如何删除最后一个逗号。您可以使用。它将在列表的每个元素之间插入逗号,并连接生成的字符串列表以将其转换为单个字符串
import Data.List
toCommaSeparatedString :: [String] -> String
toCommaSeparatedString = intercalate ","
ghci> toCommaSeparatedString ["1","2","3"]
"1,2,3"
你可以用。它将在列表的每个元素之间插入逗号,并连接生成的字符串列表以将其转换为单个字符串
import Data.List
toCommaSeparatedString :: [String] -> String
toCommaSeparatedString = intercalate ","
ghci> toCommaSeparatedString ["1","2","3"]
"1,2,3"
这有点奇怪:正如本杰明·霍奇森(Benjamin Hodgson)所展示的,最好将列表转换为字符串,然后打印出来——您希望尽可能多地将逻辑放在IO monad之外
但当然,即使你的问题从一开始就有点方向错误,它也有答案!例如,你可以这样写:
printList :: [String] -> IO ()
printList [] = return ()
printList [x] = putStr x
printList (x:xs) = do
putStr x
putStr ","
printList xs
本杰明的答案更好。但这一条可能会解释IO monad代码,并做更多的注释。这有点像一个例子:正如Benjamin Hodgson所示,最好将列表转换为字符串,然后打印出来——您希望尽可能多的逻辑位于IO monad之外
但当然,即使你的问题从一开始就有点方向错误,它也有答案!例如,你可以这样写:
printList :: [String] -> IO ()
printList [] = return ()
printList [x] = putStr x
printList (x:xs) = do
putStr x
putStr ","
printList xs
本杰明的答案更好。但这一个可能会解释IO单子代码,并做更多的注释。非常好理解的解决方案。非常好理解的解决方案。