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 ファイルを実行すると、「未定義の識別子 ...」というエラーが発生します。

私の先生の 1 人によると、これはラケットのバグです。

4

1 に答える 1