【发布时间】:2014-03-15 17:40:00
【问题描述】:
在 Chicken 中看起来我可以 (use srfi-9),但在 Guile 中看起来你说 (use-modules (srfi srfi-9)),在 Racket 中它是 (require srfi/9)。是否有一个标准化的use-module 表单应该适用于所有方案实现(以便我可以编写可移植代码)?
【问题讨论】:
标签: scheme racket guile chicken-scheme
在 Chicken 中看起来我可以 (use srfi-9),但在 Guile 中看起来你说 (use-modules (srfi srfi-9)),在 Racket 中它是 (require srfi/9)。是否有一个标准化的use-module 表单应该适用于所有方案实现(以便我可以编写可移植代码)?
【问题讨论】:
标签: scheme racket guile chicken-scheme
是的,在 R6RS 和 R7RS 中,使用:
(import (srfi …))
import 是这个的“标准形式”。问题是… 可以依赖于实现。所以问题被下移了一层。我看过:
(import (srfi :0))
(import (srfi srfi-0)
在不同的实现中。
【讨论】:
对于 R6RS 和 R7RS,有一种加载库的方法,所以它确实应该是可能的。我知道你可以做(import (srfi :9)),它可以在 Ikarus 和 Racket 中使用。我不确定是否存在命名约定的标准,因此在其他实现中可能会有所不同。您可能需要为某些实现制作包装器。
在 R5RS 中,您必须删除参考实现并使用 load。这根本不会使用实现优化的代码。我见过一些项目制作特定于实现的开始文件,这些文件利用他们支持的内容并为那些没有获得最佳性能的人添加代码。
【讨论】: