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