我们可以在计划中定义新类型,使计划能够识别它们,并且 强制执行它们的不变量吗?计划 - 关于新类型的一般问题
换句话说,当我定义例如ADT for circle(make_circle,get_radious等)时,我可以在Scheme中使用它作为新类型?
我们可以在计划中定义新类型,使计划能够识别它们,并且 强制执行它们的不变量吗?计划 - 关于新类型的一般问题
换句话说,当我定义例如ADT for circle(make_circle,get_radious等)时,我可以在Scheme中使用它作为新类型?
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
>>
球拍有强大的类型系统。另外define-struct
在计划中得到很好的支持。