2011-04-24 81 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在計劃中得到很好的支持。