在 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 仅部分回答了我感兴趣的内容。
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 仅部分回答了我感兴趣的内容。