8

このコードの実行:

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

通訳で:

ghci> j
... no response ...

CPU使用率がほとんどない状態でハングします。どうしてこれなの?期待していj = 16ました。

4

1 に答える 1

16

Haskellレポートによると、セクション3.12

式の一般的な形式をlet{d1; …; eにdn}を追加し、ネストされた、字句スコープの、相互再帰的な宣言のリストを導入します(他の言語ではletrecと呼ばれることがよくあります)。宣言の範囲は、式eと宣言の右辺です。

(強調鉱山)

したがって、2番目letのではx = x * x、すべてxのsが同じバインディングを参照し、外側のバインディングを参照するものはありませんx = 4

于 2012-08-10T13:13:08.727 に答える