2012-08-25 41 views
3

从书“编程语言:适用和解释”第6页我尝试了第一个例子中DrRacket球拍简单的AE定义型

#lang typed/racket 

(define-type AE 
[num (n number?)] 
[add (lhs AE?) (rhs AE?)] 
[sub (lhs AE?) (rhs AE?)]) 

代码,但我得到的错误

aeinterpretter.rkt:5:2: define-type: unexpected term in: (add (lhs AE?) (rhs AE?)) 

我在这里做错了什么?

回答

7

你应该在PLAI语言运行这个例子:

#lang plai 

(define-type AE 
[num (n number?)] 
[add (lhs AE?) (rhs AE?)] 
[sub (lhs AE?) (rhs AE?)]) 

Typed Racket语言是一种完全不同的语言,为您提供最基础球拍语言的力量,但有一个静态类型系统。 PLAI中的define-type表单是“类型”的不同概念。

+0

Ahh欢呼!我希望这本书能使这一点更清楚。这是怎么回事?类型后?它看起来好像是球拍不确定类型,因为它保持“询问它们”:-) –

+2

'number?'和'AE?'是* predicates *,即检查某些属性的函数(在这种情况下,“是一个数字”, “是一个AE”)。这是Racket继承Scheme的传统。例如,在REPL中尝试'(number?5)','(number?#t)'。我不记得它是否在本书中,而是在[PLAI网站](http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04)上的“获取软件”部分-26 /)解释了如何运行本书中的程序。 –

+0

欢呼的链接。它应该在本书恕我直言。我沿着“定义类型”的搜索路线走下去,最后在一些类型的球拍戏剧.. –