我正在 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>