当前位置:  开发笔记 > 编程语言 > 正文

从s表达式创建lambda

如何解决《从s表达式创建lambda》经验,为你挑选了1个好方法。

我有一个s-expression绑定到Common Lisp中的变量:

(defvar x '(+ a 2))

现在我想创建一个函数,在调用时,它会在定义它的范围内计算表达式.我试过这个:

(let ((a 4))
  (lambda () (eval x)))

(let ((a 4))
  (eval `(lambda () ,x)))

但这两个都会产生问题:EVAL会评估顶层的代码,因此我无法捕获表达式中包含的变量.请注意,我不能将LET表单放在EVAL中.有什么解决方案吗?

编辑:那么如果没有EVAL问题的解决方案,它还能怎样做呢?

编辑:有一个问题,我到底想要做什么.我正在编写一个编译器.我想接受一个s表达式,其中变量在定义表达式的词汇环境中关闭.将它写成宏可能确实更好.



1> Rainer Joswi..:

您需要创建具有必要绑定的代码.在代码周围包装一个LET并绑定要在代码中使用的每个变量:

(defvar *x* '(+ a 2))

(let ((a 4))
  (eval `(let ((a ,a))
           ,*x*)))

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有