включать и загружать в mit-схеме

В чем разница между (include path) и (load path) в mit-scheme?

Я просматриваю исходный код mit-scheme и вижу несколько применений include, и я нашел определение load в справочной документации, но не могу найти семантику.

Я также нашел include-ci -- я никогда не использовал его. Чем оно отличается от других?

Лично я использовал (include FILE) много раз, но думал, что он имеет ту же семантику, что и #include языка препроцессора, и так оно и работало.

Для меня неясно, на каком уровне они интерпретируются. Выполняется ли include на уровне чтения/дешугаринга синтаксиса/среды выполнения?

Может кто-нибудь разъяснить мне значение этих, пожалуйста?


person alinsoar    schedule 05.02.2020    source источник
comment
Какую версию схемы MIT вы используете? Я использую схему MIT 9.1.1, и (include "myprog.scm") приводит к ;Unbound variable: include.   -  person Flux    schedule 06.02.2020
comment
@Flux 1 ]=› (identify-world) ... Изображение сохранено в субботу, 10 августа 2019 г., в 18:28:48 Выпуск 10.1.10 || Микрокод 15.3 || Время выполнения 15.7 || СФ 4.41 || ЛЖЕЦ/x86-64 4.118   -  person alinsoar    schedule 06.02.2020
comment
Это может быть что-то новое. Попробуйте задать вопрос в списке рассылки mit-scheme-devel.   -  person Flux    schedule 06.02.2020
comment
@Flux я вижу в журнале изменений: commit 70bf1e80dc3a70e2017bacd490516add36c5a8d6 Автор: Крис Хэнсон ‹org/chris-hanson/cph› Дата: сб, 19 мая, 22:30:49 2018 -0700 Реализовать include и include-ci для R7RS. M src/runtime/mit-macros.scm M src/runtime/runtime.pkg   -  person alinsoar    schedule 06.02.2020
comment
@Flux частично. Я не понимаю, выполняется ли include во время read или дешугаринга (расширения макроса) - это в читателе или на 1-м шаге eval, перед выполнением? Я понимаю, что load ведет себя как процедура во время выполнения, но я не очень понимаю include из этих ответов.   -  person alinsoar    schedule 06.02.2020


Ответы (1)


Я отвечу один на этот вопрос, потому что тем временем я нашел ответ.

На данный момент эта функция была введена в mit-scheme:

commit 70bf1e80dc3a70e2017bacd490516add36c5a8d6
Author: Chris Hanson <org/chris-hanson/cph>
Date:   Sat May 19 22:30:49 2018 -0700

    Implement include and include-ci for R7RS.

Дела идут в таком порядке: читатель читает файл, он возвращает s-выражение, содержащее содержимое файла (включая подвыражения вроде (include....)). s-выражение, возвращаемое считывателем, вставляется в макрорасширитель и на этом уровне расширяются директивы (include...) (в данном случае он вызывается считывателем по имени файла, процедурой syntax расширения ). Макро-расширитель вернет структуру данных scode (язык комбинаторов, которые выражают s-выражение в обессахаренной форме). (include FILE) больше не присутствует на этапе комбинаторов scode. Вместо этого (загрузить...) присутствует и будет выполняться после того, как scode войдет в оценщик.

Это отвечает на мой вопрос. Предоставленная ссылка в комментариях лишь частично ответила на то, что меня интересовало.

person alinsoar    schedule 07.02.2020