このコードの実行:
j = let x = 4
in let x = x * x
in x
通訳で:
ghci> j
... no response ...
CPU使用率がほとんどない状態でハングします。どうしてこれなの?期待していj = 16
ました。
Haskellレポートによると、セクション3.12:
式の一般的な形式をlet{d1; …; eにdn}を追加し、ネストされた、字句スコープの、相互再帰的な宣言のリストを導入します(他の言語ではletrecと呼ばれることがよくあります)。宣言の範囲は、式eと宣言の右辺です。
(強調鉱山)
したがって、2番目let
のではx = x * x
、すべてx
のsが同じバインディングを参照し、外側のバインディングを参照するものはありませんx = 4
。