Guile Scheme和Standard Scheme之间的区别(在Racket IDE中)?

haw*_*eye 14 scheme guile r6rs racket r5rs

我有一堆"传统"Guile Scheme代码,我想在Racket Scheme IDE中运行.似乎有足够的差异使这成为一项非平凡的工作.(我的计划知识水平是完成The Little Schemer的水平).

我的问题是:

  1. Guile Scheme和Standard Scheme(在Racket IDE中)有什么区别?
  2. 鉴于这些差异,一般而言,我需要采取哪些步骤将一些Guile计划代码转换为标准计划?

附加:(对Racket Scheme和R5RS/R6RS之间的分歧感到满意) - 我想要的是在Racket IDE中运行'某些东西 - 而不是Racket语言.

soe*_*ard 6

如果通过"标准方案(在Racket IDE中)",你的意思是Racket语言,即你在代码前加上时得到的东西,#lang racket,那么要注意的前四个差异是:

  • 一个不同的模块系统
  • 一个不同的宏系统(取决于您的代码的年龄)
  • 不可变的cons-cells(除非你导入可变的cons-cells)
  • 在Racket中没有单臂ifs(使用when)

要将代码从Guile移植到Racket,请找出哪些文件位于依赖项的"底部",即查找不依赖于其他文件的文件.在Racket中打开这样的文件,在顶部添加#lang球拍线,然后尝试运行它.

您很可能会遇到一些"未绑定的标识符"错误.如果幸运的话,该功能存在于Racket中,但不包含在"球拍"语言中.在Racket文档中搜索名称,如果找到,则使用(require ...)将名称导入程序.

然后再次运行程序以查找下一个错误.

某些功能在Guile和Racket中的命名方式不同,因此请在Guile文档中查找名称并查看其功能.然后打开关于同一主题的Racket文档,看看在Racket中调用它的内容.

在某些情况下,您可能需要进行更大的更改.如果您在Racket文档中找不到某些功能,请尝试询问邮件列表.它可能只是有一个不同的名称,或者有人实现它并将其放在PLaneT上(因此在安装软件包之前它不会出现在文档中).


将srfi/1导入R5RS语言的示例.

#lang r5rs
(#%require srfi/1)
(xcons 1 2)
Run Code Online (Sandbox Code Playgroud)

R4RS代码与现代方案的区别?

需要注意的一点是,在R4RS中,空列表'()计为false,而不是被解释为true.

有关更多要注意的事项,请参阅此问题:

运行基于SICP模式匹配规则的替代码

另请参阅R5RS标准中的此更改列表: 从R4RS到R5RS的更改列表

  • 我怀疑海报可能一直在询问DrRacket中的R5RS或R6RS语言. (3认同)