R7RS小型实现是否只允许每个文件定义一个库



是否允许兼容的R7RS小型实现对每个文件的define-library数量施加限制?一些R7RS小型实现(如Guile 3.0.7(只允许每个文件有一个define-library。这是与标准的偏差,还是R7RS允许的偏差较小?

在R7RS中,define-library只是一种形式,类似于R6RS中的library。在这两种情况下,我都看不到任何允许一致性实现可能会将文件限制为只包含一个这样的表单

但Guile的文件对此事有一些看法。7.7 R7RS支持:

令人高兴的是,R7RS模块的语法被选择为与R6RS兼容,因此Guile的文档适用。

在7.7.1中与R7RS:不兼容

由于R7RS是一个远不如R6RS雄心勃勃的标准(请参阅Guile和Scheme(,Guile很容易支持它。因此,Guile是R7RS的一个完全一致的实现,除了偶尔出现的错误和一些未实现的功能。。。。

然后在7.6.1中与R6RS 不兼容

一个文件中还不支持多个library表单。这是因为library的扩展设置了当前模块,但没有恢复它。这是一个错误。

是的,我认为他们可以(也许也应该(。

如果你看一下形式语法&r7rs.pdf中的语义然后是

  • 程序是一个或多个导入声明,后面跟着一个或更多命令或定义。的命令和定义不包括define-library
  • 一个库是一个define-library形式

因此,您可以得出结论,一个程序不包括define-library表单,而一个库只包括一个这样的表单。

现在,文档根本没有说明所有这些是如何映射到文件中的,所以这取决于实现来定义。我认为,对于一个实现来说,说文件到库文件的映射应该是1-1是完全可能的,所以任何给定的库文件都只包含一个库。当然,也可以有包含程序和一个或多个库的混合文件。

在库位于自己的文件中的情况下(在允许重用方面,这显然是更有趣的情况(,必须将库名称转换为文件。这将使在每个文件中只放一个库变得相当自然。


如果是我,我会允许包含一个程序和一个或多个库的混合文件直接存在,但对于只是库的文件,我只允许每个文件中有一个。