首页 > 解决方案 > 从不同的环境返回变量

问题描述

我试图在不同环境的范围内返回一个变量。我目前拥有的是

(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

我对方案比较陌生,所以我可能缺少一些基本的基础知识,非常感谢任何指针或帮助。

标签: mit-scheme

解决方案


问题是添加没有上演。使用准引用考虑以下内容:

(define apply-env
   (lambda (env v)
       (eval `(+ ,v 0) env)
   )
)

quasiquotation 等价于(list '+ v 0)


推荐阅读