4
(let ((x 2) (y 3)
  (let ((x 7)
        (z (+ x y)))
    (* z x)))

上記のコードでは、なぜ答えが 70 ではなく 35 なのですか? 2 番目letの x は 7 なので、z は 7 + 3 = 10 で、結果は 7 * 10 = 70 になります。もう 1 つが let* であることはわかっています。この 2 を非常に混乱させています。サンプルは Google から入手したものです。 . 私はすでにグーグルで検索していますが、取得できません。

4

2 に答える 2

5

Leppie の答えを拡張するには:

(let ((x 2) (y 3))
    (let* ((x 7)
           (z (+ x y)))
       (* z x)))

あなたはあなたが期待した答えを得るでしょう。内部let*は正確に同等です

(let ((x 7))
    (let ((z (+ x y)))
       (* z x)))

実際、一部のスキームではそのように実装されている可能性があります。

言い換えると、let*最初のバインディング以降の各後続のバインディングは、以前に作成されたすべてのバインディングのスコープ内にあります。

于 2011-11-07T13:23:16.380 に答える
2

xletを呼び出すと、まだ外側にバインドされてい(+ x y)ます。

于 2011-11-07T13:18:59.340 に答える