2

我在 Racket 中编写了一个程序,现在我必须将我的代码更改为 R5RS。但我立即得到错误。

我在 Racket 中有以下代码:

#lang racket
(provide a-function)
(define (a-function)
  ; Do something
  #t)
(define a-variable #t)

然后我将其更改为 R5RS :

#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-variable”是已知的,但没有程序是已知的......

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

#lang r5rs
(#%provide a-function)
(define a-function (lambda (x y) (+ x y)))

我进行了很多搜索,我认为问题一定是我仍在将我的 Racket 代码合并到 R5RS,因此某些文件仍在 Racket 中,其他文件在 R5RS 中,并且由于我不明白的原因造成了麻烦(应该没问题...)

编辑:我尽可能简单地重建了问题:

R5RS 文件“a.rkt”:

#lang r5rs
(#%provide makePosition)
(define (makePosition x y)
  (cons x y))

球拍文件:

#lang racket
(require "a.rkt")
(makePosition 20 10)

运行 Racket 文件时,会出现错误“未定义的标识符 ...”。

根据我的一位老师的说法,这是一个球拍错误。

4

1 回答 1

0

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

对于其他程序,我真的无法重现该问题。当您将问题发布到 StackOverflow 时,您是否进行了任何更改?

于 2019-06-23T15:14:44.873 回答