Common lisp 取消报价拼接而不取消报价拼接?

Common lisp 取消报价拼接而不取消报价拼接?,common-lisp,Common Lisp,是否可以不使用反引号编写以下内容 (defmacro while(测试和休息身体) `(do() ((不,测试)) (@body)) 我想我应该试着做一个实验来了解反向报价的好处 我做到了这一点: (让*((测试“(>10)) (x 0) (主体)(主体十)(主体十)(主体十)(主体十)) (列表“不测试”(列表“不测试”)) 成功生成: (不做任何事(>10))) 为了完成这项工作,我需要一种方法将列表正文中的n元素分散到生成的表单中。 我知道这就是解压的全部目的,@,但是没有它,这真的

是否可以不使用反引号编写以下内容

(defmacro while(测试和休息身体)
`(do()
((不,测试))
(@body))
我想我应该试着做一个实验来了解反向报价的好处

我做到了这一点:

(让*((测试“(>10))
(x 0)
(主体)(主体十)(主体十)(主体十)(主体十))
(列表“不测试”(列表“不测试”))
成功生成:

(不做任何事(>10)))
为了完成这项工作,我需要一种方法将列表
正文
中的
n
元素分散到生成的表单中。
我知道这就是解压的全部目的,@
,但是没有它,这真的不可能吗?好奇。。。它类似于
apply
,但我不想在这一点上调用函数

在您的情况下,正文包含要评估的剩余表单,可以使用
列表*
添加:

(let* ((test '(> 10))
       (x 0)
       (body '((princ x) (incf x))))
  (list* 'do
         nil   
         (list (list 'not test))
         body))
另一个示例,其中拼接列表不在末尾:

`(,x ,@y ,z)
上述内容可以不加反引号地写成:

(list* x (append y (list z)))