Emacs Lisp требует, чтобы первый элемент списка form был встроенной функцией (или subr ), лямбда-выражением (т.е. (lambda LIST . LIST)
) или макрос лямбда-выражения (т.е. (macro lambda LIST . LIST)
).Первым элементом также может быть символ , слот функции которого содержит допустимый первый элемент.
(my-macro 2 3)
не имеет требуемой формы, поэтому это недопустимая функция.
Если вы привыкли к Scheme, где функциональная часть вызова функции оценивается нормально, обратите внимание, что это не может работать одинаково в Лиспе, где функции имеют другое пространство имен ((f 3)
ищет функцию f
slot, тогда как значение f
обычно является его значением slot.)
Если вы хотите оценить функцию как нормальное значение, вы можете использовать funcall
или apply
.
(funcall (my-macro 2 3) 1)