Ошибка в вашем коде в том, что вы назначаете список как fdefinition
вместо функции.Я бы посчитал это ошибкой в вашей реализации, хотя это вызывает ошибку.(Я не уверен, что это на самом деле ошибка в том смысле, что она нарушает стандарт, но было бы гораздо приятнее, если бы реализация ловила и сообщала об этой ошибке сама.)
Чтобы перевернуть списокначиная с lambda
в функцию, вам нужно оценить ее.С другой стороны, eval
вокруг setf
не кажется необходимым вообще.Таким образом, возможное решение заключается в переключении позиций eval
и setf
:
(setf (fdefinition name) (eval `(lambda (this ,@args) ,@body)))