是否可以在不使用反引号的情况下编写以下内容?
(defmacro while (test &rest body)
`(do ()
((not ,test))
,@body))
Run Code Online (Sandbox Code Playgroud)
以为我会以此为实验来了解反引号的好处。
我得到的是:
(let* ((test '(> 10))
(x 0)
(body '((princ x) (incf x))))
(list 'do nil (list (list 'not test))))
Run Code Online (Sandbox Code Playgroud)
成功生成:
(DO NIL ((NOT (> 10))))
Run Code Online (Sandbox Code Playgroud)
为此,我需要一种n将列表中的元素散布body到生成的表单中的方法。我知道这是取消引用拼接的全部目的,,@但是如果没有它,这实际上是不可能的吗?很好奇...它类似于做什么apply ,但是我现在显然不想调用函数。
在您的情况下,正文包含要评估的其余表格,可以添加以下内容LIST*:
(let* ((test '(> 10))
(x 0)
(body '((princ x) (incf x))))
(list* 'do
nil
(list (list 'not test))
body))
Run Code Online (Sandbox Code Playgroud)
另一个示例,其中拼接列表不位于末尾:
`(,x ,@y ,z)
Run Code Online (Sandbox Code Playgroud)
上面的代码可以不带反引号:
(list* x (append y (list z)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |