为什么这段代码使用阴影“let”绑定挂起



运行此代码:

j = let x = 4
    in let x = x * x
       in x

在解释器中:

ghci> j
... no response ...

挂起时 CPU 利用率非常低。 这是为什么呢? 我期待j = 16.

根据Haskell报告,第3.12节:

让表达式在 e 中具有一般形式 let { d1 ; ... ; dn },并引入一个嵌套的、词法范围的、相互递归的声明列表(let 在其他语言中通常称为 letrec)。声明的范围是表达式 e 和声明的右侧。

(强调我的)

所以在第二let中,x = x * x,所有x都指同一个绑定,没有一个引用外x = 4绑定。

最新更新