Разница между deftype в Common Lisp и Scheme

Я пытаюсь перевести некоторый код Common Lisp в код схемы. Код Common Lisp имеет расширение deftype. Являются ли deftype в Scheme такими же, как deftype в Common Lisp? Как перевести deftype в Common Lisp в эквивалентный код в Scheme?


person Paul Reiners    schedule 07.08.2009    source источник


Ответы (2)


Как говорит Антон, нет точного эквивалента Схемы Common Lisp deftype. См. CLHS:Спецификаторы типов для описания того, каким может быть спецификатор типа в Common Lisp. Они используются в объявлениях, спецификациях типов массивов, спецификациях структур и слотов CLOS, специализации аргументов общих функций и так далее. Перенос этого на Scheme, как правило, будет монументальной задачей. Ваша лучшая надежда состоит в том, что типы, определенные deftype, используются только тривиально (или не используются вообще!).

person Doug Currie    schedule 08.08.2009

Common Lisp deftype не имеет точного эквивалента Scheme. Вам придется перевести определения типов вручную или написать макрос deftype с точки зрения любой библиотеки записей Scheme, доступной в вашей системе.

В Bare Scheme вообще нет пользовательских типов. В системе R5RS вам придется искать соответствующие SRFI (например, SRFI-9 (типы записей), записи SRFI-57, записи SRFI-99 ERR5RS), а также посмотрите, какие SRFI и языковые расширения реализует ваша конкретная система Scheme; Системы Scheme обычно не очень последовательны в своих реализациях чего-либо, кроме минимального стандарта Scheme. Схема R6RS имеет записи в своей стандартной библиотеке. .

person Anton Tykhyy    schedule 07.08.2009
comment
Вы думаете о defstruct? - person Doug Currie; 08.08.2009
comment
Я не думал ни о чем конкретном. Если вам нужны только простые типы записей, вы можете собрать макрос для записей на основе массива за полчаса. - person Anton Tykhyy; 08.08.2009