Mat*_*ick 8 haskell scope let letrec
运行此代码:
j = let x = 4 in let x = x * x in x
在翻译中:
ghci> j ... no response ...
挂起CPU利用率很低.为什么是这样?我期待j = 16.
j = 16
Mat*_*ick 16
根据Haskell报告,第3.12节:
让表达式具有一般形式let {d1; ......; 在e中,引入一个嵌套的,词法范围的,相互递归的声明列表(在其他语言中通常称为letrec).声明的范围是表达式e和声明的右侧.
(强调我的)
所以在第二个let,其中x = x * x,所有xs都引用相同的绑定,没有一个引用外部x = 4绑定.
let
x = x * x
x
x = 4
归档时间:
13 年,2 月 前
查看次数:
213 次
最近记录: