Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell:如何打印列表中以逗号分隔的每个元素_List_Haskell - Fatal编程技术网

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

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

我正在尝试用逗号打印列表。 我有类似于[1,2,3]的列表,我想打印1,2,3 我该怎么做

我试过:

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单子代码,并做更多的注释。

非常好理解的解决方案。非常好理解的解决方案。