在Haskell中定义变量

时间:2015-08-30 09:45:29

标签: haskell functional-programming

我不太明白为什么以下内容会在Haskell的解释器中抛出异常:

...
Prelude> let x = 3
Prelude> x
3
Prelude> let x = x + 1
Prelude> x 
*** Exception: <<loop>>

x + 1打印结果4,但为什么我不能将它存储回x。当我将它存储在变量y中时,它确实有效。任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:10)

在您的GHCi会话中,x = x + 1不是您之前定义的x的分配,而是x的重新定义。第一个定义x = 3根本没有使用。通过将x替换为新的定义,可以理解以下内容......

x
x + 1
(x + 1) + 1
((x + 1) + 1) + 1
-- ad infinitum

...导致无限递归。