首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >r5rs中的未定义ADT

r5rs中的未定义ADT
EN

Stack Overflow用户
提问于 2014-05-01 11:51:28
回答 1查看 176关注 0票数 0

我正在用r5rs编写一个ADT,我正在使用DrRacket。我将#lang r5rs放在文件的顶部,并选择了从DrRacket源文件中确定语言,但它告诉我,我的ADT是未定义的。我正在使用DrRacket版本6.0。这是我第一次这样做,我不明白我做错了什么。

我的ADT

代码语言:javascript
复制
#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文件中得到以下内容:

代码语言:javascript
复制
default-load-handler: expected a `module' declaration
found: something else
in: #<path:/Users/path/path/path/queue.rkt>
EN

回答 1

Stack Overflow用户

发布于 2014-05-01 15:26:52

误差

my:未定义;不能在其定义之前引用标识符

通常表示函数my-ADT是在定义之前使用的。也就是说,必须将所有定义放在文件的顶部,并将表达式放在下面。

上面的示例没有使用my-ADT,因此如果您收到此错误,问题可能出现在"queue.rkt“中。你能没有错误地运行"queue.rkt“吗?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23407081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档