8

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

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

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

4

3 回答 3

17

(eval '(+ 2 21))

于 2008-10-06T00:58:07.367 回答
0

@克里斯蒂安·罗莫:

反引号示例:您可以使用 eval 和反引号来实现应用,因为您可以将参数拼接到表单中。不会是世界上最有效的事情,但是:

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

希望能满足你的好奇心!

于 2008-10-06T20:07:12.710 回答
0

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

于 2008-11-17T12:29:25.300 回答