Неопределенный ADT в r5rs

Я пишу ADT в r5rs и использую DrRacket. Я поставил #lang r5rs вверху своего файла и выбрал Определить язык из исходного кода в DrRacket, но он говорит мне, что мой ADT не определен. Я использую DrRacket версии 6.0. У меня такое впервые и я не могу понять, что я делаю не так.

Мой ADT

#lang r5rs
(#%require "queue.rkt") ;A required file
(#%provide (all-defined))

(define (my-ADT)
    (let ((val1 '())
          (val2 '()))

    (define (foo) ...)
    (define (bar) ...)

    (define (dispatch msg)
        (case msg
            ((foo) foo)
            ((bar) bar)
            (else "Unknown message")))

    dispatch))

Когда я пытаюсь создать экземпляр my-ADT, я получаю следующий вывод: my-ADT: undefined; cannot reference an identifier before its definition

Когда я удаляю #lang r5rs сверху и выбираю R5RS в качестве языка в DrRacket, кажется, что это работает. Но тогда мой файл queue.rkt по-прежнему имеет #lang r5rs вверху и Определить язык из исходного кода. Когда я удаляю #lang r5rs и выбираю R5RS в качестве языка и в этом файле, я получаю следующее в файле my-ADT:

default-load-handler: expected a `module' declaration
found: something else
in: #<path:/Users/path/path/path/queue.rkt>

person JNevens    schedule 01.05.2014    source источник


Ответы (1)


Ошибка

мой-ADT: не определено; нельзя ссылаться на идентификатор до его определения

обычно указывает, что функция my-ADT использовалась до ее определения. То есть надо поместить все определения вверху файла, а выражения разместить внизу.

В приведенном выше примере не используется my-ADT, поэтому, если вы получите эту ошибку, проблема может быть в "queue.rkt". Можете ли вы запустить "queue.rkt" без ошибок?

person soegaard    schedule 01.05.2014
comment
Да, работает нормально. Но когда я удаляю #lang r5rs из верхней части файла queue.rkt, это дает мне вторую ошибку. - person JNevens; 02.05.2014
comment
Не могли бы вы опубликовать два фактических файла. - person soegaard; 02.05.2014