我正在用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))当我尝试创建我的-ADT实例时,我得到以下输出:my-ADT: undefined; cannot reference an identifier before its definition
当我从顶部删除#lang r5rs并在DrRacket中选择R5RS作为语言时,它似乎是有效的。但是,我的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>发布于 2014-05-01 15:26:52
误差
my:未定义;不能在其定义之前引用标识符
通常表示函数my-ADT是在定义之前使用的。也就是说,必须将所有定义放在文件的顶部,并将表达式放在下面。
上面的示例没有使用my-ADT,因此如果您收到此错误,问题可能出现在"queue.rkt“中。你能没有错误地运行"queue.rkt“吗?
https://stackoverflow.com/questions/23407081
复制相似问题