缺少类型无效的清单

时间:2016-07-27 00:23:53

标签: scheme lisp racket plai

我正在编写“编程语言:应用和解释”一书第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

1 个答案:

答案 0 :(得分:2)

在重新阅读本章的最后一部分之后,我不认为这个问题有一个简单的解决方案。 “更改”仅使修订后的解释器与前一个“替换”解释器的行为相同,但突出显示了具有特殊测试用例的范围问题。

在下一部分“6.4范围”中,作者写道:

  

上面破碎的环境解释器实现了所谓的动态范围。”

我确信这将在未来的章节中解决,无论如何都要感谢。