我正在尝试编写适用于DrRacket / plt-r5rs和Gambit / gsi的内容。
我遇到的问题是Gambit中的(load "foo.scm")
无法加载define-syntax
- 块。在Gambit中使用(include "foo.scm")
可以正常工作,但当然会导致DrRacket中出现语法错误。
有没有办法解决这个问题,以便我可以编写便携式R5RS代码?
我尝试过的事情:
(include "foo.scm")
重新定义为(load "foo.scm")
,反之亦然。问题:在Gambit中重新定义宏非法。(if gambit ...)
中。问题:如果(在另一个定义中,除非在另一个定义中),将非法定义在内部。答案 0 :(得分:2)
编写一个兼容Gambit和Racket的模块非常困难。
确实有一些方法可以测试特定的实现并有条件地定义事物。事实上,有两个系统可以做到这一点:SRFI 0和SRFI 7。 Most implementations support one or the other. Not very many support both.
Gambit支持SRFI 0.Racket支持SRFI 7.
答案 1 :(得分:2)
如果有帮助:在Racket中,您可以在r5rs文件中使用include:
#lang r5rs
(#%require (only racket include))
(include "foo.scm")
如果你定义#%require
在Gambit中什么都不做,那么你可以在两个实现中使用相同的源文件。