Это проблема в SICP book ch4, вот код
(let ((a 1))
(define (f x)
(define b (+ a x))
(define a 5)
(+ a b))
(f 10))
сообщение об ошибке «a: undefined; не могу использовать перед инициализацией », если я использую лямбда-выражение
((lambda (a)
(define (f x)
(define a 5)
(define b (+ a x))
(+ a b))
(f 10)) 1)
по-прежнему не работает, но если я напишу это как определение процедуры, как это
(define (f a)
(define (g x)
(define b (+ a x))
(+ a b))
(g 10))
(f 1)
, оно работает без ошибок, но эти два в основном то же самое верно? почему выражение let и лямбда не сработали? спасибо.