включить против нагрузки в мит-схеме - PullRequest
1 голос
/ 05 февраля 2020

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

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

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

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

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

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

1 Ответ

0 голосов
/ 07 февраля 2020

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

Функция была представлена ​​в мит-схеме в этой точке:

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.

Вещи go в следующем порядке: читатель читает файл, он возвращает s-выражение, которое содержит содержимое файла (включая такие подвыражения, как (include ....)). S-выражение, возвращаемое читателем, вставляется в макроэкспандер, и на этом уровне директивы (include ...) расширяются (в этом случае он называется ридером с именем файла процедурой syntax расширения). Макроэкспандер вернет структуру данных scode (язык комбинаторов, который express s-выражение в десагератированной форме). (Включает ФАЙЛ) больше не присутствует на этапе комбинаторов Scode. Вместо этого (load ...) присутствуют и будут выполнены после того, как scode войдет в оценщик.

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

...