执行存储为列表的代码

时间:2008-10-06 00:55:01

标签: lisp common-lisp

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

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

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

3 个答案:

答案 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和宏的使用。