mit-scheme - 从不同的环境返回变量
问题描述
我试图在不同环境的范围内返回一个变量。我目前拥有的是
(define make-empty-env
(lambda()
(make-top-level-environment)
)
)
当您从解释器调用它时创建一个新环境,即(定义环境(make-empty-env))
如果我在“env”中将变量“a”定义为 15,我的目标是通过从用户初始环境调用的函数返回这个值。
类似的东西
(apply-env env 'v) 输出 -> 环境范围内变量 v 的值。v 可以在 user-initial-environment 中未定义,但如果变量存在于 env 中,仍会返回一个值。
我试过了:
(define apply-env
(lambda (env v)
(eval (+ v 0) env)
)
)
这不起作用,因为我在调用函数时传递了一个符号 'v。我的主要问题是我不知道如何传递符号并将其视为函数中的变量。这是一个家庭作业,该功能的提示是:
(应用-env env v)
返回环境 env 中变量 v 的值。
以下是对 apply-env 的一些调用:
在测试环境中,a = 1,b = 2
(应用环境测试环境'a) 1
(应用环境测试环境'b)2
我对方案比较陌生,所以我可能缺少一些基本的基础知识,非常感谢任何指针或帮助。
解决方案
问题是添加没有上演。使用准引用考虑以下内容:
(define apply-env
(lambda (env v)
(eval `(+ ,v 0) env)
)
)
quasiquotation 等价于(list '+ v 0)
。
推荐阅读
- c - 如何将结构的成员用于算术运算符(将变量添加、sub、mul、div 到结构成员)
- javascript - 访问 Vue JS 实例监视对象中的 $refs 数组
- java - 在窗口坐标中初始绘制,随后在面板坐标中绘制。如何将其全部保存在面板中?
- ruby-on-rails - 在 Rails 5.2 中无法访问多态关联中的某些路由
- magento - magento 2 以编程方式根据规则生成优惠券代码
- mysql - 我们如何在 MySQL 中列出空数据库?
- python - 将作为响应返回的静态变量放在递归块中
- python - 标准化样本数(行)的方法
- laravel - 如何解决 Laravel 5.7 中违反完整性约束的问题?
- python - Gtk.TreeView 中始终可见和粘性列