Scheme工程的文件与阅读关系[#63]
环境、原语、求值器、入口与测试各有模块边界。evaluate与apply-value互相调用,所以进入同一个engine模块;内部递归不变成两个文件之间的循环导入。阅读仍可分别讨论求值和闭包,不需要按文件目录排列。
(make-program "mce-primitives-module" "Scheme原语模块"
(list primitives-fragment) '(initial-environment)
#:imports (list (make-import '(lp-example mce environment)
'(extend-environment))))make-import声明实际导入的模块与名称,make-module-output将计划映射到Guile模块路径。make-project核验项目内的导出、重复身份和模块顺序;它不自动排序,也不猜测自由变量。外部模块在实例化或独立运行时由Guile解析。
project. Scheme解释器的模块工程[mce-project]
Module order: 文件按显式依赖顺序声明;每个Module拥有独立的导入和导出。
module. Scheme环境模块[mce-env-module]
Outputs: lp-example/mce/environment.scm
Checks: Scheme工程的11项值与5项异常核验
Exports: (extend-environment lookup define-value!)
Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。
module. Scheme原语模块[mce-primitives-module]
Outputs: lp-example/mce/primitives.scm
Checks: Scheme工程的11项值与5项异常核验
Imports: (lp-example mce environment) (extend-environment)
Exports: (initial-environment)
Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。
module. Scheme求值与闭包应用模块[mce-engine-module]
Outputs: lp-example/mce/engine.scm
Checks: Scheme工程的11项值与5项异常核验
Imports: (lp-example mce environment) (extend-environment lookup define-value!)
Exports: (evaluate-sequence)
Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。
module. Scheme解释器入口模块[mce-entry-module]
Outputs: lp-example/mce/entry.scm
Checks: Scheme工程的11项值与5项异常核验
Imports: (lp-example mce primitives) (initial-environment)
Imports: (lp-example mce engine) (evaluate-sequence)
Exports: (run)
Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。
module. Scheme工程核验模块[mce-checks-module]
Outputs: lp-example/mce/checks.scm
Checks: Scheme工程的11项值与5项异常核验
Imports: (lp-example mce entry) (run)
Exports: (run-checks)
Initialization order: 片段按下列清单建立;函数体依赖可以相互引用。
Module的Exports是公开入口,Imports链接到提供名称的项目模块,Initialization order是定义建立顺序。Outputs直接打开生成文件。片段上的Assembled in列出所有使用它的计划,包含原来的单文件计划和本页的模块计划;这些信息来自装配数据,不需要另写索引。