Хочу переопределить стандартный конструктор объекта, чтобы он принимал дополнительный параметр, который обрабатывался специальным образом, а оставшиеся параметры и новый передавались родительскому методу.
(defmethod initialize-instance :around ((object my-class) &rest args &key my-param)
(call-next-method object :another-param my-param args)))
Что-то типа такого (над my-param могут произойти какие-то операции, мне нужно не просто переименовать один key-параметр в другой).
Проблема находится в последней строчке - мне нужно как-то передать args не в качестве аргумента, а чтобы функция была вызвана с этим списком аргументов.
Можно сделать что-то подобное:
(defmethod initialize-instance :around ((object my-class) &rest args &key my-param)
(apply 'call-next-method (cons object (cons :another-param (cons my-param args)))))
С обычной функцией такое-бы прокатило, но call-next-method судя по всему является макросом и поэтому я получаю ошибку, мол функция не найдена (хотя прямой вызов работает нормально).
Каким образом в Lisp можно заставить функцию скушать список, как если бы это были её прямые аргументы, а не один аргумент со значением списка?