![]() |
1
2
我不知道怎么做
简化评估:
现在
现在
我们首先评估内部调用,所以需要解决
我们从
现在我们需要评估
此时我们应该抛出一个错误:
实时演示(使用Perl版本的代码,其中所有绑定都是手动动态的): https://ideone.com/DWjwBj
它爆炸了,就像预测的那样:
如果将所有绑定更改为词法(替换所有出现的
|
![]() |
2
2
动态范围没有闭包,因此引用自由变量的过程/函数意味着程序调用堆栈中具有该名称的任何变量。 在词法范围中,它是创建lambda时捕获的变量。因此,代码:
原因很简单。函数返回的函数
现在常见的Lisp有动态范围和词法范围。动态范围变量是用
Scheme的参数是可变的,并且有语法来更新和恢复它,这样它就可以作为一个动态变量。 编辑 我已经测试了你的词法和动态lisp,两者似乎都按预期工作。 |