Недавно я начал изучать Common Lisp, и (просто для удовольствия) решил переименовать лямбда-макрос.
Моя попытка:
> (defmacro λ (args &body body) `(lambda ,args ,@body))
Кажется, он правильно расширяется, когда сам по себе:
> (macroexpand-1 '(λ (x) (* x x)))
(LAMBDA (X) (* X X))
Но когда он вложен внутри выражения, выполнение не выполняется:
> ((λ (x) (* x x)) 2)
(Λ (X) (* X X)) is not a function name; try using a symbol instead
Мне, вероятно, не хватает чего-то очевидного о расширении макросов, но не могу понять, что это такое.
Может быть, вы можете мне помочь?
изменить: Он работает с лямбдой:
> ((lambda (x) (* x x)) 2)
4
изменить 2: Один из способов заставить его работать (как предложил Райнер):
> (set-macro-character #\λ (lambda (stream char) (quote lambda)))
(проверено в Clozure CL)