【发布时间】: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 告诉他们!
标签: string haskell recursion output