2016-04-13 9 views
2

次のスキームのための私のクラスのノートである:スキームのlet束縛文

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

回答利回り35.誰かが私にこれを説明することはできますか? したがって、2行目のz(+ x y)ではx値は2のようですが、その後(x z)のx値は7ですか?おかげでたくさんの

答えて

2

おそらく、これを説明する簡単な方法は、匿名の手続き呼び出しのための構文としてsugarを使用することです。

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

は同じです:

((lambda (x y) 
    ((lambda (x z) 
     (* z x))  ; first here is x 7 
    7 
    (+ x y)))  ; this x is from the outer 
2 
3) 
4
(let ((x 2) (y 3)) 

ここで第一letがバインドされているすべての値まで担当にまだあります。

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

ここで第2のletが担当します。

(* z x))) 

あなたは(x 7)(z (+ x y))で使用したい場合は、let*

TEST

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

> 35 

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

> 70 

を試し、それがお役に立てば幸いです。

関連する問題