Ваша функция test
получает аргумент abcd
в виде функции, но вы не можете просто вызвать функцию, поместив символ, ссылающийся на нее, в первой позиции списка, который будет оценен.Поскольку Emacs Lisp является Lisp-2 , ссылка на функцию, предоставленную для интерактивного запроса, хранится в символьном слоте abcd
значения , а не в его функциональном слоте.Правила оценки для списка, подобного
(abcd)
, предполагают поиск в слоте функции первого объекта первого объекта, если этот объект является символом, как в вашем случае.Если вместо этого вы хотите вызвать функцию, указанную в слоте значения символа , вам понадобится функция funcall
:
(funcall abcd)
, которая говорит: «Возьми abcd
, извлеките значение из его слота значения и, при условии, что это функция, вызовите ее здесь, так же, как если бы эта функция была указана в первой позиции списка либо в символе слот функции или путем прямой ссылки на объект функции. "
Вот ответ на аналогичный вопрос со ссылками, полезными для дальнейшего изучения.