【问题标题】:Not null lexical environment for evaleval 的非空词法环境
【发布时间】:2016-12-11 15:33:20
【问题描述】:

如何在非空词法环境中使用 eval 评估一些 lisp 代码?我需要这个特性来实现正确的插值功能。

【问题讨论】:

  • 这是不可能的,但是您也许应该将您的问题更改为实际问题,而不是您选择的解决方案的问题,因为这闻起来像 XY 问题。
  • 好的,谢谢,实际上,我只需要确定没有办法做到这一点。实际上,我决定发送带有值的哈希表而不是访问环境。

标签: common-lisp


【解决方案1】:

如果您将环境建模为 let 中的绑定:

((x 3) (y 2))

...然后您可以使用这些绑定来评估任何形式 f,如下所示:

(eval `(let ,e ,f))

这是最简单的情况,但您可以轻松地转换数据以适应这种语法。如果需要,您还可以绑定函数、宏等。

请注意,如果您在运行时需要值,那么动态绑定可能会更好。您可以使用哈希表等,但请注意还有鲜为人知的 PROGV 特殊运算符:

除其他外,progv 在为 Lisp 中嵌入的语言编写解释器时很有用;它提供了绑定动态变量机制的句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多