我们可以在Scheme中定义新类型,以便Scheme能够识别它们 强制执行不变量?
换句话说,当我定义,例如,ADT for circle(make_circle,get_radious等等)时,我可以在Scheme中将它用作新类型吗?
答案 0 :(得分:1)
SRFI-9定义了define-record-type宏。大多数方案都有define-record,define-struct或类似的变体,我认为这是define-record-type的简化。
然后很多方案都有类似CLOS的对象系统,比如tinyclos或Chicken的Coops - 两者都实现了多方法,这很不错。
使用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
>>
答案 1 :(得分:0)
Racket拥有强大的类型系统。此外,define-struct
在计划中也得到了很好的支持。