题
在理解(引用)之后,我很好奇是如何导致语句执行的。我的第一个想法是
(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和宏的使用。
不隶属于 StackOverflow