Похоже, что если я захочу использовать eval
для определения вложенной функции в среде, и если до возврата есть только суб define
s, то на то, что я определил ранее, нельзя ссылаться более поздним define
s (вызывая неопределенную ошибку).
Но если я добавлю несколько бессмысленных кодов между суб define
с, я смогу выполнить код без проблем.
Я не знаю, является ли это неправильным использованием eval
или чем-то еще, но поведение кажется странным ... Кто-нибудь может помочь?
#lang racket
(require r5rs)
(define env (scheme-report-environment 5))
(eval '(define (f)
;comment the next line to cause error
0 ; or anything except define
(define x 3)
(define y (+ x 1))
y) env)
(eval '(f) env)
Сообщение об ошибке:
x: undefined;
cannot use before initialization