运行此代码:
j = let x = 4
in let x = x * x
in x
解释器中的:
ghci> j
... no response ...
以很少的CPU利用率挂起。为什么是这样?我期待j = 16
。
答案 0 :(得分:16)
根据Haskell报告,section 3.12:
让表达式具有通用形式let {d1; ......;在e中,引入一个嵌套的,词法范围的,相互递归的声明列表(在其他语言中通常称为letrec)。声明的范围是表达式e和声明的右侧。
(强调我的)
所以在第二个let
,x = x * x
,所有x
引用相同的绑定, none 引用外x = 4
捆绑。