Я настоятельно предпочитаю стиль lambda
для обучения, так как он делает создание функций более явным, как говорит Джей.
При обучении вы начинаете с простых функций, таких как atom?
, на верхнем уровне define
d.Это означает, что возможно и даже более компактно создать функцию с defun
-стилем define
, который вы упомянули.
Однако, когда вы начинаете использовать функции в качестве первого классазначения, например, в качестве аргумента map
, вы впервые увидите lambda
, и это может показаться более странным и волшебным, чем на самом деле.
Вместо этого, если вы все время определяли свои функции с помощью lambda
, было бы не так-то просто увидеть, что функции похожи на любое другое значение.Они оказываются справа от define
довольно часто, но ничем не отличаются от числа или константы в кавычках:
(define x 1)
(define l '(2 3 4 5))
(define s (cons x ls))
(define f (lambda (n) (+ n 2)))
Конечно, язык поддерживает обе формы, так чтов конечном итоге стиль.Для меня есть привлекательная последовательность в использовании define
, когда все ваши функции выполняются с lambda
: первый аргумент всегда является символом, а второй аргумент - просто любым старым выражением.И тот факт, что lambda
подобен любому старому выражению, является одной из самых важных вещей для любого функционального программиста.