我不太明白为什么以下内容会在Haskell的解释器中抛出异常:
...
Prelude> let x = 3
Prelude> x
3
Prelude> let x = x + 1
Prelude> x
*** Exception: <<loop>>
x + 1打印结果4,但为什么我不能将它存储回x。当我将它存储在变量y中时,它确实有效。任何人都可以解释为什么会这样吗?
答案 0 :(得分:10)
在您的GHCi会话中,x = x + 1
不是您之前定义的x
的分配,而是x
的重新定义。第一个定义x = 3
根本没有使用。通过将x
替换为新的定义,可以理解以下内容......
x
x + 1
(x + 1) + 1
((x + 1) + 1) + 1
-- ad infinitum
...导致无限递归。