gpt4 book ai didi

haskell - 新线 haskell

转载 作者:bug小助手 更新时间:2023-10-28 10:51:23 28 4
gpt4 key购买 nike

嘿。本周的一个教程,其中一个问题要求通过使用其他函数 formatLine 和 formatList 创建一个函数 formatLines,以格式化行列表。

我的代码是这样的;

type Line = String

formatLine :: Line -> String
formatLine l = l ++ "\n"

formatList :: (a -> String) -> [a] -> String
formatList f [] = []
formatList f xs = f (head xs) ++ formatList f (tail xs)

formatLines :: [Line] -> String
formatLines xs = formatList formatLine xs

代码似乎(至少在我看来)应该可以工作,但不是在 "\n"所在的位置创建新行,而是将\n 附加到字符串中。

任何帮助将不胜感激。

最佳答案

那是因为您可能正在使用 print打印结果。相反,请使用 putStr .观察:

Prelude> print "test\ntest\n"
"test\ntest"
Prelude> putStr "test\ntest\n"
test
test

除此之外,您可以使用模式匹配来编写 formatList 而无需 headtail :

formatList :: (a -> String) -> [a] -> String
formatList f [] = []
formatList f (x:xs) = f x ++ formatList f xs

但其实不需要自己定义formatList,和函数concatMap是一样的:

formatList :: (a -> String) -> [a] -> String
formatList = concatMap

结合所有这些,您也可以只写(注意 (++ "\n")section ):

formatLines :: [String] -> String
formatLines = concatMap (++ "\n")

...这又相当于unlines :

formatLines :: [String] -> String
formatLines = unlines

关于haskell - 新线 haskell ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755752/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com