Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp 宏:如何在反引号生成的代码中输出逗号?_Common Lisp - Fatal编程技术网

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))