2011-04-24 77 views
1

我们可以在计划中定义新类型,使计划能够识别它们,并且 强制执行它们的不变量吗?计划 - 关于新类型的一般问题

换句话说,当我定义例如ADT for circle(make_circle,get_radious等)时,我可以在Scheme中使用它作为新类型?

回答

1

SRFI-9定义了define-record-type宏。大多数方案都有define-record,define-struct或类似的变体,我相信这是对define-record-type的简化。

然后很多方案都有一些类似CLOS的对象系统,比如tinyclos或者鸡的Coops--它们都实现了multimethods,这很好。

示例使用SRFI-9:

(define-record-type circle 
    (make-circle r) 
    circle? 
    (r get-radius)) 

然后在您的REPL:

>> (define c (make-circle 12)) 
>> c 
#<circle> 
>> (get-radius c) 
12 
>> 
0

球拍有强大的类型系统。另外define-struct在计划中得到很好的支持。