如何在非null词法环境中使用eval评估一些lisp代码?我需要此功能才能实现正确的插值功能。
答案 0 :(得分:1)
如果您将环境建模为let
中的绑定:
((x 3) (y 2))
...然后您可以评估任何具有这些绑定的f
形式,如下所示:
(eval `(let ,e ,f))
这是最简单的情况,但您可以轻松转换数据以适应此语法。如果需要,您还可以绑定函数,宏等。
请注意,如果您在运行时需要值,那么动态绑定可能更好。您可以使用哈希表等,但请注意,还有一个鲜为人知的PROGV
特殊运算符:
除此之外,在为Lisp中嵌入的语言编写解释器时,progv非常有用;它提供了绑定动态变量的机制的句柄。