在理解(引用)之后,我很好奇如何导致语句执行。我的第一个想法是
(defvar x '(+ 2 21))
`(,@x)
但这只是评估为(+ 2 21)
或 的内容x
。如何运行放在列表中的代码?
在理解(引用)之后,我很好奇如何导致语句执行。我的第一个想法是
(defvar x '(+ 2 21))
`(,@x)
但这只是评估为(+ 2 21)
或 的内容x
。如何运行放在列表中的代码?
(eval '(+ 2 21))
@克里斯蒂安·罗莫:
反引号示例:您可以使用 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))
希望能满足你的好奇心!
在http://lisperati.com/上查看有趣的 Lisp 教程。有 Common Lisp 和 Emacs Lisp 的版本,它演示了 quasiquote 和宏的使用。