[英]Undefined ADT in r5rs
我正在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
my-ADT: undefined; cannot reference an identifier before its definition
当我从顶部删除#lang r5rs
并在DrRacket中选择R5RS作为语言时,它似乎可以工作。 但是然后我的queue.rkt
文件仍然在顶部具有#lang r5rs
并从Source中确定Language 。 当我远程#lang r5rs
并在该文件中还选择R5RS作为语言时,在my-ADT
文件中得到以下内容:
default-load-handler: expected a `module' declaration
found: something else
in: #<path:/Users/path/path/path/queue.rkt>
错误
my-ADT:未定义; 无法在定义标识符之前引用标识符
通常表示函数my-ADT
在定义之前就已使用。 也就是说,必须将所有定义放在文件顶部,并将表达式放在下面。
上面的示例没有使用my-ADT
因此,如果出现此错误,则问题可能出在“ queue.rkt”中。 您可以正确运行“ queue.rkt”吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.