我想使用putStrLn打印像["hallo", "world", "!"]
这样的字符串列表,以便获得输出:
hello
world
!
如何使用功能执行此操作?我有
printMe :: [String] -> String
printMe (x:xs) =
但不知道该怎么做
答案 0 :(得分:8)
您可以使用Haskell库的常规工具。此版本返回连接的字符串,供您在更合适的位置打印出来。
printMe xs = foldr (++) "" (map (\str -> str ++ "\n") xs)
或者您可以通过更简单的映射立即打印它:
printMeM xs = mapM_ putStrLn xs
这非常粗鲁,因为我还不是真正的Haskell程序员。
答案 1 :(得分:2)
你看看这个答案了吗? Haskell: can't use "map putStrLn"?
答案 2 :(得分:1)
完成你的例子:
printMe [] = return () -- never forget the base case!
printMe (x:xs) = do
putStrLn x
printMe xs
然而,您会发现自己会一次又一次地输入类似上述内容的代码,然后您会看到forM
,mapM
,{{1}和朋友们。
答案 3 :(得分:0)
printMe = putStrLn . intercalate ("\n")
请注意,我使用了putStrLn而不是putStr,以便在最后一个单词之后获得额外的换行符,因为intercalate仅在列表元素之间添加第一个参数。