【问题标题】:Why is this Haskell program making backslashes?为什么这个 Haskell 程序会产生反斜杠?
【发布时间】:2020-11-30 14:47:13
【问题描述】:

我是 Haskell 的新手,写这个程序是为了练习函数式编程。我不知道它是否是一个好程序,除了两件事。

  • 它有效(它向我展示了 Collat​​z 树中从 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 告诉他们!

标签: string haskell recursion output


【解决方案1】:

collatz 已经返回一个字符串,所以你不需要在它上面调用show

collatz n = show(n) ++ " -> " ++ collatz (next_step n)

使用show 添加引号,然后由于嵌套引号导致反斜杠。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2014-12-04
  • 2011-01-23
  • 1970-01-01
相关资源
最近更新 更多