Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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
如何在haskell的函数中使用putStrLn打印[String]的每个元素?_Haskell - Fatal编程技术网

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

如何在haskell的函数中使用putStrLn打印[String]的每个元素?,haskell,Haskell,我想使用putStrLn打印字符串列表,如[“你好”,“世界”,“!”],以便获得输出: hello world ! 我如何使用函数实现这一点?我有 printMe :: [String] -> String printMe (x:xs) = 但是我不知道从这里该怎么办你看过这个答案了吗 你看过这个答案了吗 您可以使用Haskell库的通用工具。此版本返回连接的字符串,以便在更合适的位置打印 printMe xs = foldr (++) "" (map (\str -> s

我想使用putStrLn打印字符串列表,如
[“你好”,“世界”,“!”]
,以便获得输出:

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不需要。