0

r5rs で ADT を作成しており、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

DrRacket の言語を上から外してR5RS#lang r5rsを選択すると動作するようです。しかし、その後、私のファイルはまだ上部にあり、Define Language from Sourceがあります。リモートでそのファイルの言語としてR5RSを選択すると、ファイルに次のように表示されます。queue.rkt#lang r5rs#lang r5rsmy-ADT

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

1 に答える 1

-1

エラー

私の-ADT: 未定義; その定義の前に識別子を参照することはできません

通常、関数my-ADTが定義される前に使用されたことを示します。つまり、すべての定義をファイルの上に配置し、式を以下に配置する必要があります。

上記の例では を使用していないmy-ADTため、このエラーが発生した場合、問題は「queue.rkt」にある可能性があります。エラーなしで「queue.rkt」を実行できますか?

于 2014-05-01T15:26:52.580 に答える