我正在编写“编程语言:应用和解释”一书第6章http://cs.brown.edu/courses/cs173/2012/book/From_Substitution_to_Environments.html
我已经应用了本书中描述的修复,但缺点是没有将类型添加到源中引用的空列表中。 我认为这是一个值传递/传递参考的东西,任何关于如何在没有作为参数传入时设置mt-env的线索?
#lang plai-typed
;; Binding types
(define-type Binding
[bind (name : symbol) (val : number)])
;; some helper functions:
(define-type-alias Env (listof Binding))
(define mt-env empty)
(define extend-env cons)
;; testing function
(define (addBinding [b : Binding] [env : Env])
(extend-env b env)
)
(addBinding (bind 'x 5) mt-env) ;; returns (list (bind x 5))
(display mt-env) ;; returns empty list
如果需要,下面是上下文完整代码的链接,interp函数的appC案例是我的问题区域的具体位置,谢谢。 https://github.com/MickDuprez/plai/blob/master/Chapter%206/chapter-6.rkt
答案 0 :(得分:2)
在重新阅读本章的最后一部分之后,我不认为这个问题有一个简单的解决方案。 “更改”仅使修订后的解释器与前一个“替换”解释器的行为相同,但突出显示了具有特殊测试用例的范围问题。
在下一部分“6.4范围”中,作者写道:
“上面破碎的环境解释器实现了所谓的动态范围。”
我确信这将在未来的章节中解决,无论如何都要感谢。