Haskell写'\n'而不是换行符

sym*_*mon 3 string haskell newline

我有这个代码,而不是打印出"\n",我希望它将下一个字符串放在一个新行上,但似乎无法搞清楚.有什么指针吗?

onSeparateLines :: [String] -> String
onSeparateLines [] = ""
onSeparateLines ( x:[] ) = x
onSeparateLines ( x:xs ) = x ++  "\n" ++ onSeparateLines xs
Run Code Online (Sandbox Code Playgroud)

我得到的是

"AAAA\nAAAA"
Run Code Online (Sandbox Code Playgroud)

应该是:

"AAAA"
"AAAA"
Run Code Online (Sandbox Code Playgroud)

Rei*_*chs 9

给定的函数和您对"\n"的使用是正确的,因此错误必须在其他地方.在不知道细节的情况下,我怀疑你正在使用(相当于)print而不是putStr打印你的字符串.show在打印之前确保您的字符串不是n.

如果这是在GHCi中,请注意使用print,等等打印值

> onSeparateLines ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

print字符串和显示转义字符.你要

> putStrLn (onSeparateLines ["foo", "bar"])
Run Code Online (Sandbox Code Playgroud)

代替.

  • 你不能这样做.GHCi将"打印"该值.没有办法阻止这一点.您的函数是正确的:它将字符串列表与中间的换行符连接起来.如果在`onSeparateLines`函数中包含`putStrLn`,那么它将具有不同的类型.它将是一个函数`[String] - > IO()`. (2认同)