gpt4 book ai didi

lisp - 从 s 表达式创建 lambda

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:29 24 4
gpt4 key购买 nike

我有一个 s 表达式绑定(bind)到 Common Lisp 中的一个变量:

(defvar x '(+ a 2))

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

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

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

但这两者都会产生一个问题:EVAL 将在顶层计算代码,因此我无法捕获表达式中包含的变量。请注意,我不能将 LET 形式放入 EVAL。有什么解决办法吗?

编辑:所以如果没有解决 EVAL 问题的方法,还有什么办法可以解决?

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

最佳答案

您需要创建具有必要绑定(bind)的代码。将 LET 包裹在您的代码周围并绑定(bind)您希望在代码中可用的每个变量:

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

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

关于lisp - 从 s 表达式创建 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/215883/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com