csi 和 csc(Chicken Scheme)的区别

Differences between csi and csc (Chicken Scheme)

为什么函数 compose 定义在解释器 csi 而不是编译器 csc 中?我知道我可以很容易地自己定义它,但我只是想知道为什么会有这样的差异。

compose 程序来自 data-structures 单元(参见 the manual or API docs)。您可以通过键入 (use data-structures).

来加载它

至于为什么默认情况下它在 csi 中可用而不在 csc 中可用,这是一个有点毛茸茸的实现细节; csi 解释器只需要自己加载一些模块来提供解释器环境。由于它的实现方式,csi 加载的所有内容在顶层也可用。在 CHICKEN 5 中,这种情况有了很大改善,解释器从一个干净的顶层环境开始。

所以这在实践中意味着您应该始终显式 (use) 您的程序需要的所有模块,以确保它在编译模式和解释模式下工作。您也可以将整个程序包装在 module 中,而不是将您的程序放在顶层环境中。模块总是有一个完全干净的环境,所以编译和解释时没有区别。