我有一个s表达式绑定到Common Lisp中的一个变量:
(defvar x '(+ a 2))现在我想创建一个函数,当调用它时,在定义它的作用域中计算表达式的值。我试过了:
(let ((a 4))
  (lambda () (eval x)))和
(let ((a 4))
  (eval `(lambda () ,x)))但这两者都产生了一个问题: EVAL将在顶层计算代码,因此我无法捕获表达式中包含的变量。请注意,我不能将LET表单放入EVAL中。有什么解决方案吗?
编辑:那么如果EVAL问题没有解决方案,还能怎么做呢?
编辑:有一个关于我到底想要做什么的问题。我正在写一个编译器。我希望接受在定义表达式的词法环境中闭合变量的s表达式。把它写成宏可能确实更好。
发布于 2009-03-05 13:15:42
您需要创建具有必要绑定的代码。用字母括起你的代码,并绑定你想要在你的代码中可用的每个变量:
(defvar *x* '(+ a 2))
(let ((a 4))
  (eval `(let ((a ,a))
           ,*x*)))https://stackoverflow.com/questions/215883
复制相似问题