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?))
我在这里做错了什么?
Ahh欢呼!我希望这本书能使这一点更清楚。这是怎么回事?类型后?它看起来好像是球拍不确定类型,因为它保持“询问它们”:-) –
'number?'和'AE?'是* predicates *,即检查某些属性的函数(在这种情况下,“是一个数字”, “是一个AE”)。这是Racket继承Scheme的传统。例如,在REPL中尝试'(number?5)','(number?#t)'。我不记得它是否在本书中,而是在[PLAI网站](http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-04)上的“获取软件”部分-26 /)解释了如何运行本书中的程序。 –
欢呼的链接。它应该在本书恕我直言。我沿着“定义类型”的搜索路线走下去,最后在一些类型的球拍戏剧.. –