【发布时间】:2022-01-20 20:29:59
【问题描述】:
是否允许符合 R7RS-small 的实现对每个文件的 define-library 数量施加限制?一些 R7RS-small 实现,例如 Guile 3.0.7,每个文件只允许一个 define-library。这是偏离标准还是R7RS-small允许的?
【问题讨论】:
标签: scheme language-lawyer r7rs
是否允许符合 R7RS-small 的实现对每个文件的 define-library 数量施加限制?一些 R7RS-small 实现,例如 Guile 3.0.7,每个文件只允许一个 define-library。这是偏离标准还是R7RS-small允许的?
【问题讨论】:
标签: scheme language-lawyer r7rs
是的,我认为他们可以(也许应该)。
如果您查看r7rs.pdf 中的正式语法和语义,那么
define-library。define-library 表单。因此,您可以得出结论,程序不包含define-library 表单,而库恰好包含一个这样的表单。
现在该文档并没有说明所有这些如何映射到文件中,因此由实现来定义它。我认为实现完全有可能说文件到库文件的映射应该是 1-1,因此任何给定的库文件都只包含一个库。当然,也有可能包含一个程序和一个或多个库的混合文件。
如果库位于它们自己的文件中(这显然是允许重用的更有趣的情况),则必须将库名称转换为文件。这样就可以很自然地在每个文件中放置一个库。
如果是我,我会允许包含程序和一个或多个库的混合文件直接存在,但对于只是库的文件,我会允许每个文件中只有一个。
【讨论】:
在 R7RS 中,define-library 只是一种形式,类似于 R6RS 中的library。在这两种情况下,我都没有看到任何符合标准的实现可能会限制文件只包含一个这样的形式。
但是 Guile 文档对此事有话要说。在7.7 R7RS Support:
幸运的是,R7RS 模块的语法被选择为与 R6RS 兼容,因此 Guile 的文档适用。
在7.7.1 Incompatibilities with the R7RS:
由于 R7RS 是一个远没有 R6RS 雄心勃勃的标准(请参阅 Guile 和 Scheme),因此 Guile 很容易支持。因此,Guile 是一个完全符合 R7RS 的实现,除了偶尔出现的错误和一些未实现的功能......
然后在7.6.1 Incompatibilities with the R6RS
尚不支持在一个文件中包含多个
library表单。这是因为library的扩展设置了当前模块,但没有恢复它。这是一个错误。
【讨论】: