(include path)
和(load path)
in有mit-scheme
什么区别?
我grep mit-scheme的源代码,我看到了的一些用法,include
我load
在参考文档中找到的定义,但是我找不到语义。
我还发现了include-ci
-我从未使用过它。与其他有什么不同?
就我个人而言,我使用了(include FILE)
很多次,但是认为它#include
与预处理器的语言具有相同的语义,因此可以正常工作。
对我来说,不清楚这些解释的水平。是include
在阅读器/语法删除/运行时级别执行的吗?
有人可以澄清一下这些含义吗?
我将单独回答这个问题,因为与此同时我找到了答案。
此功能已在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)在代码组合器阶段不再存在。而是存在(load ...),并且将在代码输入评估器之后执行。
这回答了我的问题。注释中提供的链接仅部分回答了我感兴趣的内容。