Схема - общий вопрос о новых типах - PullRequest
1 голос
/ 24 апреля 2011

Можем ли мы определить новые типы в Схеме так, чтобы Схема распознавала их и приводила в исполнение их инварианты?

Другими словами, когда я определяю, например, ADT для круга (make_circle, get_radious и т. Д.), Я могу использовать его в схеме как новый тип?

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

SRFI-9 определяет макрос типа define-record.Большинство схем имеют вариант define-record, define-struct или что-то подобное, что, как я считаю, является упрощением define-record-type.

А затем многие схемы имеют некоторый тип CLOS-подобной объектной системы, такой каккак tinyclos или Chicken's 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
>> 
0 голосов
/ 24 апреля 2011

Ракетка имеет мощную систему типов. Также define-struct хорошо поддерживается среди схем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...