如果通过“标准方案(在 Racket IDE 中)”,您的意思是 Racket 语言,即,当您在代码前加上前缀时会得到什么,#lang racket,
那么要注意的前四个差异是:
- 不同的模块系统
- 不同的宏系统(取决于您的代码的年龄)
- 不可变的 cons-cells(除非你导入可变的)
- Racket 中没有单臂 ifs(使用
when
)
要将代码从 Guile 移植到 Racket,请找出哪些文件位于您的依赖项的“底部”,即找到不依赖于其他文件的文件。在 Racket 中打开这样的文件,在顶部添加 #lang racket 行,然后尝试运行它。
您很可能会遇到一些“未绑定标识符”错误。如果幸运的话,该功能存在于 Racket 中,但不包含在“racket”语言中。在 Racket 文档中搜索名称,如果找到,则使用 (require ...) 将名称导入程序。
然后再次运行程序,发现下一个错误。
某些函数在 Guile 和 Racket 中的命名不同,因此请在 Guile 文档中查找名称并查看它的作用。然后打开关于同一主题的 Racket 文档,并查看它在 Racket 中的名称。
在某些情况下,您可能需要进行更大的更改。如果您在 Racket 文档中找不到某些功能,请尝试询问邮件列表。可能是它只是有一个不同的名称,或者有人实现了它并将它放在PLaneT上(因此在你安装包之前它不会出现在文档中)。
将 srfi/1 导入 R5RS 语言的示例。
#lang r5rs
(#%require srfi/1)
(xcons 1 2)
R4RS 代码与现代 Scheme 的区别?
需要注意的一件事是,在 R4RS 中,空列表 '() 算作假,而不是被解释为真。
有关更多需要注意的事项,请参阅此问题:
运行基于 SICP 模式匹配规则的替换代码
另请参阅 R5RS 标准
的更改列表:从 R4RS 到 R5RS 的更改列表