今天我在学习一些新的 Haskell,当时我在 ghci 中尝试了一些东西。
它基本上归结为:
Prelude> let x = 6
Prelude> x
6
Prelude> let y = show x
Prelude> y
"6"
Prelude> let x = show x
Prelude> x
"\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" --(repeats)
那么ghci不能在赋值中自我引用吗?我觉得它类似于
i = i++;
在 C 中,或尝试引用 let
的先前分配(不是 let*
)在方案中。有没有办法做到这一点,或者我应该使用更简单的 let y = show x
?
最佳答案
Haskell 中的定义默认是递归的。所以你为 x
所做的定义指的是完全相同的x
,这就是您看到的字符串很长的原因,因为 x
定义为 String
这是调用 show
的结果本身,所以你一直看到显示字符串的开头引号,然后那些开头引号转义,等等。
这些类型的定义可能非常有用。例如,如果你写:
let fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
您可以根据自身将斐波那契数列定义为无限列表。
然后你可以做一些类似
take 10 fibs
只看到前 10 个元素。
关于haskell - ghci 自引用赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223600/