Haskell 为什么这段代码会使用阴影`let`绑定挂起?
运行此代码:Haskell 为什么这段代码会使用阴影`let`绑定挂起?,haskell,scope,let,letrec,Haskell,Scope,Let,Letrec,运行此代码: j = let x = 4 in let x = x * x in x 在口译员中: ghci> j ... no response ... 挂起时CPU利用率非常低。为什么会这样?根据哈斯克尔报告,我预计j=16 Let表达式在e中具有一般形式Let{d1;…;dn},并引入嵌套的、词典范围的、相互递归的声明列表(Let在其他语言中通常称为letrec)。声明的范围是表达式e和声明的右侧 (强调矿山) 因此,在第二个let,其中x=x*x,所有xs
j = let x = 4
in let x = x * x
in x
在口译员中:
ghci> j
... no response ...
挂起时CPU利用率非常低。为什么会这样?根据哈斯克尔报告,我预计j=16 Let表达式在e中具有一般形式Let{d1;…;dn},并引入嵌套的、词典范围的、相互递归的声明列表(Let在其他语言中通常称为letrec)。声明的范围是表达式e和声明的右侧 (强调矿山) 因此,在第二个
let
,其中x=x*x
,所有x
s都指向相同的绑定,没有一个指向外部x=4
绑定