【问题标题】:Executing code stored as a list执行存储为列表的代码
【发布时间】:2008-10-06 00:55:00
【问题描述】:

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

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

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

【问题讨论】:

  • 我想你问错问题了。你真的想做什么?

标签: lisp common-lisp


【解决方案1】:

(eval '(+ 2 21))

【讨论】:

  • :) 请注意,您可以使用反引号做一些有趣的事情来控制 eval 评估的内容。
  • 现在我很好奇...我可以举个例子吗?
【解决方案2】:

@克里斯蒂安·罗莫:

反引号示例:您可以使用 eval 和反引号来实现 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))

希望能满足你的好奇心!

【讨论】:

  • 这很有趣...我将不得不进一步了解所有这些花哨的小技巧。
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2012-06-08
    相关资源
    最近更新 更多