gpt4 book ai didi

common-lisp - 取消引用拼接而不取消引用拼接?

转载 作者:行者123 更新时间:2023-12-02 09:07:33 25 4
gpt4 key购买 nike

是否可以在不使用反引号的情况下编写以下内容?

(defmacro while (test &rest body)
`(do ()
((not ,test))
,@body))

我想尝试将此作为一个实验来了解反引号的好处。

我到目前为止:

(let* ((test '(> 10))
(x 0)
(body '((princ x) (incf x))))
(list 'do nil (list (list 'not test))))

成功生成:

(DO NIL ((NOT (> 10))))

为了完成此任务,我需要一种方法将列表 bodyn 元素分散到生成的表单中。我知道这就是取消引用拼接 ,@ 的全部目的,但是如果没有它,这实际上是不可能的吗?好奇...这与apply does 类似但我显然不想在此时调用函数。

最佳答案

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

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

关于common-lisp - 取消引用拼接而不取消引用拼接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56343259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com