计划 - 关于新类型的一般问题

时间:2011-04-24 09:26:03

标签: scheme

我们可以在Scheme中定义新类型,以便Scheme能够识别它们 强制执行不变量?

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

2 个答案:

答案 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在计划中也得到了很好的支持。