我們可以在計劃中定義新類型,使計劃能夠識別它們,並且 強制執行它們的不變量嗎?計劃 - 關於新類型的一般問題
換句話說,當我定義例如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
在計劃中得到很好的支持。