2016-04-13 2 views
2

Ниже в моем классе примечаниях схемы:Схема Пусть связанные заявления

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

Ответ дает 35. Может ли кто-нибудь объяснить мне это? Итак, на второй строке z (+ x y) значение x кажется равным 2, но после этого (* z x) значение x равно 7? Большое спасибо

ответ

2

Возможно, более простой способ объяснить это - взглянуть на возможность использования синтаксического сахара для анонимных вызовов процедур.

(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*

ТЕСТА

(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 

Надеется, что это помогает.

Смежные вопросы