在理解(引用)之后,我很好奇是如何导致语句执行的。我的第一个想法是
(defvar x '(+ 2 21))
`(,@x)
但仅评估为(+ 2 21)
或x
的内容。如何运行放在列表中的代码?
答案 0 :(得分:16)
(eval '(+ 2 21))
答案 1 :(得分:0)
@ChristiánRomo:
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))
希望满足你的好奇心!
答案 2 :(得分:0)
在http://lisperati.com/查看有趣的Lisp教程。有Common Lisp和Emacs Lisp的版本,它演示了quasiquote和宏的使用。