如何在haskell的函数中使用putStrLn打印[String]的每个元素?
我想使用putStrLn打印字符串列表,如如何在haskell的函数中使用putStrLn打印[String]的每个元素?,haskell,Haskell,我想使用putStrLn打印字符串列表,如[“你好”,“世界”,“!”],以便获得输出: hello world ! 我如何使用函数实现这一点?我有 printMe :: [String] -> String printMe (x:xs) = 但是我不知道从这里该怎么办你看过这个答案了吗 你看过这个答案了吗 您可以使用Haskell库的通用工具。此版本返回连接的字符串,以便在更合适的位置打印 printMe xs = foldr (++) "" (map (\str -> s
[“你好”,“世界”,“!”]
,以便获得输出:
hello
world
!
我如何使用函数实现这一点?我有
printMe :: [String] -> String
printMe (x:xs) =
但是我不知道从这里该怎么办你看过这个答案了吗 你看过这个答案了吗 您可以使用Haskell库的通用工具。此版本返回连接的字符串,以便在更合适的位置打印
printMe xs = foldr (++) "" (map (\str -> str ++ "\n") xs)
或者,您可以通过更简单的映射立即打印它:
printMeM xs = mapM_ putStrLn xs
这是非常粗鲁的,因为我还不是真正的Haskell程序员。您可以使用Haskell库的通用工具。此版本返回连接的字符串,以便在更合适的位置打印
printMe xs = foldr (++) "" (map (\str -> str ++ "\n") xs)
或者,您可以通过更简单的映射立即打印它:
printMeM xs = mapM_ putStrLn xs
这是非常粗鲁的,因为我还不是真正的Haskell程序员。完成您的示例:
printMe [] = return () -- never forget the base case!
printMe (x:xs) = do
putStrLn x
printMe xs
然而,您会发现自己一次又一次地输入类似于上述的代码,然后您会想看看
表单
,mapM
,序列
和朋友。完成您的示例:
printMe [] = return () -- never forget the base case!
printMe (x:xs) = do
putStrLn x
printMe xs
printMe = putStrLn . intercalate ("\n")
然而,您会意识到,您会发现自己一次又一次地键入类似于上述内容的代码,然后您会想查看表单
,mapM
,序列
和朋友
printMe = putStrLn . intercalate ("\n")
注意,我使用了putStrLn而不是putStr,以便在最后一个单词之后获得一个额外的换行符,因为插入只在列表元素之间添加第一个参数
请注意,我使用putStrLn而不是putStr,以便在最后一个单词后获得一个额外的换行符,因为插入只在列表元素之间添加第一个参数。您想打印结果还是返回结果?您想打印结果还是返回结果?@progo-不过,您的答案是有效的。去吧@英戈,谢谢,是的,我测试过了。但是代码不是很漂亮:(@progo-嗯,第一个有点过头了。fold(++)“”(intersperse“\n”xs)@progo另一个技巧是:查找
未行
:)@Ingo,intersperse
不会添加最后的终止换行@progo,mapM_uuuputstrln
是实现这一点的惯用方法,很好的答案:-)@progo-不过,您的答案是有效的。去吧@英戈,谢谢,是的,我测试过了。但是代码不是很漂亮:(@progo-嗯,第一个有点过头了。fold(++)“”(intersperse“\n”xs)@progo另一个技巧是:查找未行
:)@Ingo,intersperse
不会添加最后的终止换行@progo,mapM_uuuuputstrln
是实现这一点的惯用方法,很好的回答:-)即使没有单词,也会添加一个额外的换行符,我认为OP不需要。即使没有单词,也会添加一个额外的换行符,我认为OP不需要。