在 mit-scheme 中包含与加载

include vs. load in mit-scheme

mit-scheme中的(include path)(load path)有什么区别?

我 grep 了 mit-scheme 的源代码,我看到了 include 的一些用法,我在参考文档中找到了 load 的定义,但我找不到语义。

我还找到了 include-ci -- 我从未使用过它。它与其他人有何不同?

就我个人而言,我多次使用 (include FILE),但认为它与预处理器语言的 #include 具有相同的语义,并且它确实有效。

对我来说,不清楚这些解释的水平。 include 是在 reader/syntax desugaring/runtime 级别执行的吗?

有人能给我解释一下这些的意思吗?

我会单独回答这个问题,因为在此期间我找到了答案。

此时在 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.

事情按这个顺序进行:reader 读取文件,它 return 是一个包含文件内容的 s 表达式(包括子表达式,如 (include ....) ).由 reader 编辑的 s 表达式 return 被插入到宏扩展器中,并且在这个级别上扩展了 (include ...) 指令(在这种情况下,它被称为 reader与文件名,由 syntax 扩展程序)。宏扩展器将 return 一个 scode 数据结构(一种以脱糖形式表达 s 表达式的组合器语言)。 (include FILE) 不再出现在 scode 组合器阶段。相反,(load ...) 存在并将在 scode 进入评估程序后执行。

这回答了我的问题。评论中提供的 link 仅部分回答了我感兴趣的内容。