Common lisp 宏:如何在反引号生成的代码中输出逗号?
我有一个宏的形式:Common lisp 宏:如何在反引号生成的代码中输出逗号?,common-lisp,Common Lisp,我有一个宏的形式: ;;宏wich做了一个类似于defun的处理,例如,处理一些其他的东西。 (defmacro def2(名称(&rest参数)和正文) `(defun,(intern(字符串upcase name))(,@args) (@body)) 我想生成大量的def2: (defmacro defs() `(项目 ,@(循环表示“(“名称1”“名称2”“名称3”)中的名称) collect`(def2、name和rest参数) (印刷,args());;谢谢。:)这确实是准确的,但我
;;宏wich做了一个类似于defun的处理,例如,处理一些其他的东西。
(defmacro def2(名称(&rest参数)和正文)
`(defun,(intern(字符串upcase name))(,@args)
(@body))
我想生成大量的def2
:
(defmacro defs()
`(项目
,@(循环表示“(“名称1”“名称2”“名称3”)中的名称)
collect`(def2、name和rest参数)
(印刷,args());;谢谢。:)这确实是准确的,但我认为我的问题表述得不好(它与print
一起工作,这是一个糟糕的函数选择)。如果我想使用带有&rest参数的函数而不是print
,例如(list,@args)
,我该怎么做?@Fnifni(apply#'list args)
CL-USER 33 > (defmacro def2 (name (&rest args) &body body)
`(defun ,(intern (string-upcase name)) (,@args)
,@body))
DEF2
CL-USER 34 > (defmacro defdefs ()
`(progn
,@(loop for name in '("name1" "name2" "name3")
collect `(def2 ,name (&rest args)
(print args)))))
DEFDEFS
CL-USER 35 > (pprint (macroexpand '(defdefs)))
(PROGN
(DEF2 "name1" (&REST ARGS) (PRINT ARGS))
(DEF2 "name2" (&REST ARGS) (PRINT ARGS))
(DEF2 "name3" (&REST ARGS) (PRINT ARGS)))
CL-USER 36 > (pprint (macroexpand-1 '(DEF2 "name1" (&REST ARGS) (PRINT ARGS))))
(DEFUN NAME1 (&REST ARGS)
(PRINT ARGS))