Если бы код, выполняемый load
, мог получить доступ к лексическому контексту формы load
, это не был бы лексический контекст.
Ситуация была бынесколько иначе, если бы load
был макросом, а не функцией, но даже тогда стандартные макросы R5RS гигиеничны и не могут легко испортить лексический контекст.
Однако вы могли бы написать макрос defmacro
в стилеэто делает то, о чем вы просите, читая файл и возвращая форму begin
, содержащую все прочитанное из файла.
Пример кода:
(define-macro (include file)
(let ((read-forms
(lambda ()
(let loop ((forms '()))
(let ((form (read)))
(if (eof-object? form)
(reverse forms)
(loop (cons form forms))))))))
(with-input-from-file file
(lambda ()
(cons 'begin (read-forms))))))
Обратите внимание, что define-macro
не являетсястандарт.Вам нужно будет выяснить, как и как это можно сделать, в зависимости от реализации вашей Схемы.