首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从s表达式创建lambda

从s表达式创建lambda
EN

Stack Overflow用户
提问于 2008-10-19 02:04:55
回答 5查看 988关注 0票数 2

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

代码语言:javascript
运行
复制
(defvar x '(+ a 2))

现在我想创建一个函数,当调用它时,在定义它的作用域中计算表达式的值。我试过了:

代码语言:javascript
运行
复制
(let ((a 4))
  (lambda () (eval x)))

代码语言:javascript
运行
复制
(let ((a 4))
  (eval `(lambda () ,x)))

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

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

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

EN

Stack Overflow用户

回答已采纳

发布于 2009-03-05 13:15:42

您需要创建具有必要绑定的代码。用字母括起你的代码,并绑定你想要在你的代码中可用的每个变量:

代码语言:javascript
运行
复制
(defvar *x* '(+ a 2))

(let ((a 4))
  (eval `(let ((a ,a))
           ,*x*)))
票数 5
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/215883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档