Ваш код в более читаемой форме:
(let ((x 10))
(define y (lambda (x) x))
(define x 5)
(+ x (y x)))
Вы можете применить метод подстановки:
(+ x (y x)) ; ==>
(+ 5 (y 5)) ; ==>
(+ 5 ((lambda (x) x) 5)) ; ==>
(+ 5 5) ; ==>
10
Вы ошиблись. Каждый let
может быть переписан как lambda
, который немедленно называется:
(let ((a aexpr) (b bexpr))
body ...)
; ==
((lambda (a b) body ...) aexpr bexpr)