以下代码段给了我预期的结果:
(let ((name 'test)
(args '("arg1" "arg2")))
`(defun ,name ,@args))
;; (DEFUN TEST "arg1" "arg2")
为什么如果出现args
符号列表QUOTE
?
(let ((name 'test)
(args '('arg1 'arg2)))
`(defun ,name ,@args))
;; (DEFUN TEST (QUOTE ARG1) 'ARG2)
读者将扩展'symbol
至(quote symbol)
。所以你的情况
'('arg1 'arg2)
相当于
(quote ((quote arg1) (quote arg2)))
评估结果为以下列表:
((quote arg1) (quote arg2))
从反引号开始对表单进行评估会导致将列表元素((quote arg1)
和(quote arg2)
)拼接到结果列表(defun ...)
中与之前字符串相同的位置。
我不知道为什么您的实现会打印扩展后的第一个拼接元素,而不显示第二个。但是,如上所述,两种形式在阅读时都是等效的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句