在理解(引用)之后,我很好奇是如何导致语句执行的。我的第一个想法是

(defvar x '(+ 2 21))
`(,@x)

但只是评估为(+ 2 21),或 x 的内容。如何运行放在列表中的代码?

有帮助吗?

解决方案

(eval'(+ 2 21))

其他提示

@ Christiá n Romo:

Backtick示例:您可以使用eval和backtick实现apply,因为您可以将参数拼接到表单中。不会成为世界上最有效的东西,但是:

(eval `(and ,@(loop for x from 1 upto 4 collect `(evenp ,x))))

相当于

(eval '(and (evenp 1) (evenp 2) (evenp 3) (evenp 4)))

顺便说一下,这与(效率更高)

具有相同的结果
(every 'evenp '(1 2 3 4))

希望满足你的好奇心!

http://lisperati.com/ 上查看有趣的Lisp教程。有Common Lisp和Emacs Lisp的版本,它演示了quasiquote和宏的使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top