Haskell中的范围问题

时间:2015-02-22 03:15:35

标签: haskell

我编写了一个简单的程序来试图理解Haskell中的作用域规则:

myfunc =
let x = 4 in
let x = x + 1 in
x

调用时,此函数将懒惰地评估第4行的x,然后我们注意到它尝试在第三行评估x,然后尝试在第三行再次计算x,从而创建无限循环。如何在不重命名第三行x + 1的x的情况下修复此问题?

1 个答案:

答案 0 :(得分:2)

你不能。在Haskell中用=引入的所有绑定都是递归的。 (其他语言有时会提供非递归绑定表单,但不提供Haskell。)

您可以执行类似

的操作
myfunc = do
    x <- Identity 4
    x <- Identity (x+1)
    Identity x

...但此时,只需将x重命名为x',或者根据所需的手指输入数量看起来非常有吸引力。

P.S。调用此myfunc有点奇怪 - 它不是函数!