【发布时间】:2013-08-08 16:23:39
【问题描述】:
在plai 方案中提供了define-type 和type-case,但由于某种原因,它们在typed/racket 中不存在。我想使用宏在球拍中实现这些结构。
我想创建一个宏“def-user-type”,下面是我要使用的语法
(def-user-type Shape
[Rectangle ((l Number) (b Number))]
[Circle ((r radius))]
[Blah (())])
它的行为应该大致如下
(define-type Shape (U Rectangle Circle Blah))
(struct: Rectangle ([l : Number] [b Number]))
(struct: Circle ([r : Number]))
(struct: Blah ())
这是我迄今为止所取得的成就。这是不正确的,球拍编译器给出的错误信息也没有帮助。
#lang typed/racket
(define-syntax define-user-type
(syntax-rules()
[(define-user-type type-name
[sub-type ((field-name type) ...)]
...)
((define-type type-name (U sub-type ...))
(struct: sub-type ([field-name : type] ...))
...)]))
请指导我。 谢谢!
【问题讨论】: