不是eval的词法环境

时间:2016-12-11 15:33:21

标签: common-lisp

如何在非null词法环境中使用eval评估一些lisp代码?我需要此功能才能实现正确的插值功能。

1 个答案:

答案 0 :(得分:1)

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

((x 3) (y 2))

...然后您可以评估任何具有这些绑定的f形式,如下所示:

(eval `(let ,e ,f))

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

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

  

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