Я не знаю, назовете ли вы его канонической формулировкой, но привяжите локальную функцию. В руководстве GNU я рекомендую использовать "flet":
(defun adder-with-flet (x)
(flet ( (f (x) (+ x 3)) )
(f x))
)
Однако случайно я попробовал (после того, как немного проиграл в Схеме) следующее выражение, где я привязываю выражение лямбда к переменной с помощью "let", а также работает, если передать функцию mapcar *:
(defun adder-with-let (x)
(let ( (f (lambda (x) (+ x 3))) )
(car (mapcar* f (list x)) ))
)
И обе функции работают:
(adder-with-flet 3) ==> 6
(adder-with-let 3) ==> 6
Почему вторая работает? Я не могу найти документацию, где 'let' может использоваться для привязки функций к символам.