如何使用putStrLn在haskell的函数中打印[String]的每个元素?

时间:2011-04-14 08:47:20

标签: haskell

我想使用putStrLn打印像["hallo", "world", "!"]这样的字符串列表,以便获得输出:

hello
world
!

如何使用功能执行此操作?我有

printMe :: [String] -> String
printMe (x:xs) = 

但不知道该怎么做

4 个答案:

答案 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

然而,您会发现自己会一次又一次地输入类似上述内容的代码,然后您会看到forMmapM,{{1}和朋友们。

答案 3 :(得分:0)

printMe = putStrLn . intercalate ("\n")

请注意,我使用了putStrLn而不是putStr,以便在最后一个单词之后获得额外的换行符,因为intercalate仅在列表元素之间添加第一个参数。