жаль, если это не так, если вы могли бы поделиться рабочей реализацией коды? я действительно путают с
(define-datatype program program?
(a-program (l (list-of instruction?))))
что такое список-оф? я должен представить здесь, что вы хотите объявить некоторые варианты программ. a-program будет определяться как список инструкций ... ok. если list-of возвращает lambda, который является правильным предикатом (который возвращает true только при действии в списке инструкций), то это работает?
(define pgm->list
(lambda (pgm)
(cases program pgm
(a-program (l) l))))
Edit: Так как определить тип данных, было неизвестно большинству из нас, кроме ОП, я добавляю некоторые документы:
[синтаксис] (определить-тип данных TYPENAME [PREDICATE] VARIANT .. .)
Определяет тип записи с именем TYPENAME, где VARIANT ... определяет один или несколько конструкторов для экземпляров этого типа. ВАРИАНТ должен иметь вид
ВАРИАНТ = (КОНСТРУКТОРСКИМИ (FIELDNAME FIELDPRED) ...)
КОНСТРУКТОР это имя процедуры конструктора, который будет определен с как много аргументов, которые заданы поля. (FIELDNAME FIELDPRED) ... укажите имя для каждого поля и процедуру для одного из них, который должен возвращать истинное значение для значений поля .
Необязательный PREDICATE должен быть именем процедуры, которая будет определена, и , которая возвращает #t при применении к экземпляру этой записи варианта.
[синтаксис] (случаи TYPENAME EXP ОГОВОРКА ...)
Средство для согласования и деконструируя экземпляр EXP варианта записи с именем TypeName. Каждый ПУНКТА определяет конструктор полевых имен и тело, чтобы выполнить, когда конструктор соответствует записи экземпляра:
= (ПУНКТ КОНСТРУКТОР (FIELDNAME ...) ТЕЛО ...) | (еще BODY ...)
ура!
'define-datatype' не является частью Схемы. Можете ли вы описать это или опустить тег 'schem'? – GoZoner
Поиск в 'docs.racket-lang.org', кажется, что' define-datatype' является частью модулей 'lang/htdp-advanced' и' eopl'. OP должен указать, какую книгу они используют. –
Если мы предположим, что 'pgm' является' программой', а 'program' содержит список инструкций, возникает вопрос, как получить доступ к полям структуры данных программы? Или вас интересует, как написать компилятор? – soegaard