Недавно я начал изучать 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
Возможно, я упускаю что-то очевидное о расширении макроса, но не смог найти, что именно.
Может быть, вы сможете мне помочь?
edit: Это действительно работает с лямбдами:
> ((lambda (x) (* x x)) 2)
4
edit 2: Один из способов заставить его работать (как предложил Rainer):
> (set-macro-character #\λ (lambda (stream char) (quote lambda)))
(проверено в Clozure CL)