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 人によると、これはラケットのバグです。