Sch*_*020 5 environment scheme
在评估此代码时,我需要帮助绘制环境模型图的相关部分:
Scheme>(define x 10)
Scheme> ((lambda (x y) (+ (y 3) x)) 6 (lambda (w) (* x 9)))
Run Code Online (Sandbox Code Playgroud)
我需要确保并将每个lambda主体写在评估它的环境旁边.
好吧,我知道只有一个定义,因此大部分工作将由"匿名"或"无名"功能完成,这些仍将以各种方式显示在环境模型图中
如果我没记错的话,每当您执行 lambda 时,就会创建一个新环境,其中参数的值将与其名称绑定。该环境继承自 lambda 最初声明的环境。
在所有情况下,第一个环境是全局环境——这是它所(define x 10)在的地方。然后,正如我之前所说,每当执行 lambda 时都添加一个新环境(如第二行所示)。该环境继承自执行 lambda 的环境。
您所做的第一件事(从第二行开始)是调用第一个 lambda。为此,您必须评估论点。由于您在实际输入第一个 lambda 之前评估参数,因此第二个 lambda 是在全局环境中声明的。
接下来,为第一个 lambda 调用创建一个环境(继承自全局环境)。这里x绑定到 6 并y绑定到第二个 lambda。然后,为了执行+,调用第二个 lambda。由于它是在全局环境中声明的,因此它的新环境继承自此环境,而不是第一个 lambda 的环境。这意味着,对于第二个,x必然为 10 而不是 6。
我希望这可以理解地解释一切。
澄清一下:将存在三个环境——全局环境和每个函数调用一个环境。两个函数调用的环境都将从全局环境继承。第一个 lambda 的代码将在其自己的环境中运行,而第二个 lambda 的代码将运行第二个 lambda 的代码。
另外,请查看envdraw,可以在这里找到: http: //inst.eecs.berkeley.edu/~cs3s/stk/site-scheme/envdraw/
如果您阅读了 ANNOUNCE 文件,它会告诉您如何获取它。您需要使用 STk,一种特定的方案解释器。
envdraw自动绘制Scheme的环境图。
免责声明:在上使用Scheme的课程时,我从来没有费心envdraw,但它得到了我的教授的认可(显然是他的一位学生当天写回来的),而且其他人似乎使用它做得很好。
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |