为啥这个 Haskell 程序会产生反斜杠?
Posted
技术标签:
【中文标题】为啥这个 Haskell 程序会产生反斜杠?【英文标题】:Why is this Haskell program making backslashes?为什么这个 Haskell 程序会产生反斜杠? 【发布时间】:2020-11-30 14:47:13 【问题描述】:我是 Haskell 的新手,写这个程序是为了练习函数式编程。我不知道它是否是一个好程序,除了两件事。
它有效(它向我展示了 Collatz 树中从 6 到 1 的路径) 它打印了太多的反斜杠next_step :: Integer -> Integer
collatz :: Integer -> String
next_step n = do
if (n `mod` 2) == 0 then
n `div` 2
else
(n * 3) + 1
collatz 1 = "1"
collatz n = (show n) ++ " -> " ++ (show (collatz (next_step n)))
main = putStrLn (collatz 6)
输出:
6 -> "3 -> \"10 -> \\\"5 -> \\\\\\\"16 -> \\\\\\\\\\\\\\\"8 -> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"4 -> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"2 -> \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"1\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\"\\\"\""
我希望反斜杠消失。
【问题讨论】:
简单,只需在运行main
之前将fix show
输入到ghci 中即可修复show
的工作方式。 ;-)(您需要导入Data.Function
。)
@DanielWagner 一些高级 Haskeller 可能会认为这是一个可爱的笑话,但它只会让任何问这个问题的人感到困惑。
@amalloy 我对我们博学的博伊斯比你更有信心。一张眨眼的脸,以及 ghci 立即以比你可以摇晃的更多的反斜杠回答,这对于任何人来说都是足够的线索,这只是为了好玩。如果没有,现在我们也有两个非常严肃的 cmets 告诉他们!
【参考方案1】:
collatz
已经返回一个字符串,所以你不需要在它上面调用show
:
collatz n = show(n) ++ " -> " ++ collatz (next_step n)
使用show
添加引号,然后由于嵌套引号导致反斜杠。
【讨论】:
顺便说一下,请参阅***.com/questions/968198/haskell-show-screwed-up/… 了解添加引号的原因以上是关于为啥这个 Haskell 程序会产生反斜杠?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 ElasticSearch Nest Query 中会出现转义反斜杠?