首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R5RS“提供”问题

R5RS“提供”问题
EN

Stack Overflow用户
提问于 2015-03-25 16:38:50
回答 1查看 116关注 0票数 2

我用Racket编写了一个程序,现在我必须将我的代码更改为R5RS。但我马上就会犯错误。

我在球拍中有以下代码:

代码语言:javascript
复制
#lang racket
(provide a-function)
(define (a-function)
  ; Do something
  #t)
(define a-variable #t)

然后,我将其改为R5RS:

代码语言:javascript
复制
#lang r5rs
(#%provide a-function)
(define (a-function)
  ; Do something
  #t)
(define a-variable #t)

现在的问题是,当我运行这个简单的代码并尝试调用过程"a-function“时,它会告诉我a-function: undefined; cannot reference an identifier before its definition

我注意到这个问题只存在于过程中,变量“a-变量”是已知的,但不知道过程.

编辑:我试图把一个过程伪装成一个变量,看看他是否知道这个过程,但是我得到了同样的错误。

代码语言:javascript
复制
#lang r5rs
(#%provide a-function)
(define a-function (lambda (x y) (+ x y)))

我搜索了很多东西,我想问题一定是我还在将自己的Racket代码合并到R5RS中,所以某些文件仍然在R5RS中,其他文件在R5RS中,这是因为我不明白的一个原因(它不应该是一个问题.)

编辑:我尽可能轻松地重构了这个问题:

R5RS文件"a.rkt“:

代码语言:javascript
复制
#lang r5rs
(#%provide makePosition)
(define (makePosition x y)
  (cons x y))

球拍档案:

代码语言:javascript
复制
#lang racket
(require "a.rkt")
(makePosition 20 10)

当运行球拍文件时,这会导致错误“未定义的标识符.”。

,据我的一位老师说,这是个骗人的错误。

EN

回答 1

Stack Overflow用户

发布于 2019-06-23 15:14:44

对于最后一个程序(makePosition),请注意R5RS不区分大小写,因此makePosition被标准化为makeposition。然而,球拍世界是区分大小写的,所以makePosition不存在,makeposition是存在的。

对于其他程序,我真的无法重现这个问题。当你把这个问题发到StackOverflow上时,你有什么改变吗?

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

https://stackoverflow.com/questions/29261436

复制
相关文章

相似问题

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