У меня есть макрос вида:
;; Macro wich does a sort of defun for instance, with some other stuff.
(defmacro def2 (name (&rest args) &body body)
`(defun ,(intern (string-upcase name)) (,@args)
,@body))
И я хочу сгенерировать лот def2
:
(defmacro defdefs ()
`(progn
,@(loop for name in '("name1" "name2" "name3")
collect `(def2 ,name (&rest args)
(print ,@args))))) ; <---- HERE.
Я хочу сослаться на args
вформа def2
, но если я напишу ,@args
, она будет ссылаться на переменную (не определенную) в макросе defdefs
.Я подумал использовать что-то вроде macro-function
и apply
, но есть ли лучший способ сообщить defdefs
, что я хочу вывести этот список: (print ,@args)
без оценки части ,@args
во время макроразложения?
Я пытался играть с кавычками, двойными кавычками, обратными кавычками и двойными кавычками, но не могу найти решение ...
Заранее спасибо.