Давайте рассмотрим два простых случая, чтобы мы могли понять, как мы можем переписать любую функцию, которая использует let с лямбдой:
В нашем первом случае у нас есть один let. Эта функция очень проста, она возвращает заданный вход, добавляя к нему 10:
(define (test x)
(let ((b 10))
(+ x b)))
Теперь давайте превратим это в выражение, использующее лямбду:
(define (test-lambda x)
((lambda (b)
(+ x b))
10))
Как видите, test-lambda возвращает лямбда-оценку, которая оценивается со значением 10. Тестируя это, мы можем сказать:
(test-lambda 10)
, который вернет 20.
- Теперь для более чем одного let мы вкладываем лямбда-выражения в лямбда-выражения.
В нашем случае let у нас есть два оператора let:
(define (lets x)
(let ((a 10)
(b 20))
(+ x a b)))
Мы можем написать это с лямбдой так:
(define (lets-lambda x)
((lambda (a)
((lambda (b)
(+ x a b))
20))
10))
Итак, теперь мы оцениваем каждое из лямбда-выражений, давая им значение, а самое внутреннее лямбда-выражение заботится о том, что мы хотим вычислить, используя имена переменных, которым было присвоено каждое лямбда-выражение.
Надеюсь, это было ясно и могло бы помочь другим увидеть более ясно!