我有一堆想要在 Racket Scheme IDE 中运行的“遗留”Guile Scheme 代码。似乎有足够的差异使这成为一项重要的练习。 (我的 Scheme 知识水平是完成 The Little Schemer 的水平)。
我的问题是:
补充: (对 Racket Scheme 和 R5RS/R6RS 之间的分歧感到满意)——我想要的是在 Racket IDE 中运行“某些东西”——而不是在 Racket 语言中运行。
最佳答案
如果通过“标准方案(在 Racket IDE 中)”,您的意思是 Racket 语言,即当您在代码前加上 #lang racket,
时会得到什么那么要注意的前四个差异是:
when
)要将代码从 Guile 移植到 Racket,请找出哪些文件位于依赖项的“底部”,即找到不依赖于其他文件的文件。
在 Racket 中打开这样的文件,在顶部添加 #lang racket 行,然后尝试运行它。
您很可能会遇到一些“未绑定(bind)标识符”错误。
如果幸运的话,该功能存在于 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 中,空列表 '() 算作假,而不是被解释为真。
有关更多需要注意的事项,请参阅此问题:
Running SICP Pattern Matching Rule Based Substitution Code
另请参阅 R5RS 标准的更改列表:
List of changes from R4RS to R5RS
关于scheme - Guile 方案和标准方案之间的区别(在 Racket IDE 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636331/