Давайте рассмотрим два простых случая, чтобы мы могли понять, как мы можем переписать любую функцию, которая использует 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))
Итак, теперь мы оцениваем каждое из лямбда-выражений, присваивая им значение, а самое внутреннее лямбда-выражение заботится о том, что мы хотим вычислить, используя имена переменных, которые были присвоены каждому лямбда-выражению.
Надеюсь, это было ясно и может помочь другим увидеть более ясно!
person
Arash Saidi
schedule
03.06.2013