Scheme 方案-关于新类型的一般问题

Scheme 方案-关于新类型的一般问题,scheme,Scheme,我们能否在Scheme中定义新类型,以便Scheme能够识别它们并 强制执行它们的不变量 换句话说,例如,当我定义ADT for circle(make_circle、get_radious等)时,我可以在Scheme中将其作为一种新类型使用?Racket具有全功率类型系统。另外,define struct在各种方案中都得到了很好的支持。Racket具有强大的类型系统。此外,define struct在方案中也得到很好的支持。定义define record type宏。大多数方案都有define

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


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

Racket具有全功率类型系统。另外,
define struct
在各种方案中都得到了很好的支持。

Racket具有强大的类型系统。此外,
define struct
在方案中也得到很好的支持。

定义define record type宏。大多数方案都有define-record、define-struct或类似的变体,我认为这是define-record类型的简化

然后很多方案都有一些类似CLO的对象系统,比如或Chicken's,它们都实现了多方法,这很好

使用SRFI-9的示例:

(define-record-type circle
    (make-circle r)
    circle?
    (r get-radius))
然后在你的回复中:

>> (define c (make-circle 12))
>> c
#<circle>
>> (get-radius c)
12
>> 
>>(定义c(圈12))
>>c
#
>>(获取半径c)
12
>> 
定义定义记录类型宏。大多数方案都有define-record、define-struct或类似的变体,我认为这是define-record类型的简化

然后很多方案都有一些类似CLO的对象系统,比如或Chicken's,它们都实现了多方法,这很好

使用SRFI-9的示例:

(define-record-type circle
    (make-circle r)
    circle?
    (r get-radius))
然后在你的回复中:

>> (define c (make-circle 12))
>> c
#<circle>
>> (get-radius c)
12
>> 
>>(定义c(圈12))
>>c
#
>>(获取半径c)
12
>>