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

当我#lang r5rs从顶部删除并选择R5RS作为 DrRacket 中的语言时,它似乎可以工作。但是我的queue.rkt文件仍然#lang r5rs在顶部,并且从 Source 确定语言。当我远程#lang r5rs并选择R5RS作为该文件中的语言时,我在my-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 回答