我一直在使用PLT Scheme,但是它存在一些问题。 有没有人知道一个更好的实现来处理SICP?
使用Racket(前身为PLT Scheme)。
DrRacket IDE是所有Scheme相关内容的绝佳起点,包括SICP。
要在文档中查找关键字,请将光标放在关键字上,然后按F1。在DrRacket中,您现在可以直接在REPL(读取-求值-打印循环)中看到图像。
Neil van Dyke的DrRacket SICP支持。
更新(2016年):新的SICP软件包位于http://pkgs.racket-lang.org/#[sicp]。使用软件包管理器(在DrRacket中)下载它或使用raco
。手册
更新2(2016年):如果您想尝试SICP图片语言的新实现,请下载sicp-pict2.rkt。
更新3(2020年):sicp-lang软件包包括sicp语言和sicp图片语言的实现。
文档:DrRacket SICP支持
源代码:GitHub上的sicp-lang
Racket软件包:sicp-lang软件包信息
注意: 图形语言比书中描述的图形语言具有更多功能(如颜色和更大的尺寸)。源代码包含示例: https://github.com/sicp-lang/sicp/blob/master/sicp-pict/main.rkt
使用MIT Scheme。
这是SICP的作者推荐的,也是在MIT进行6.001: 计算机程序的构造和解释课程中使用的技术。
在 macOS 上完成这件事情其实相当让人头疼。以下是今天(假设您已经安装了 Homebrew)的解决方法。(偶尔需要运行brew update
)。
brew cask install racket
raco setup # might be optional
raco pkg install sicp
现在你可以 (require sicp)
或者直接运行
racket -l sicp --repl
scheme
。在bash中就是:alias scheme='racket -l sicp --repl'
你可以将其添加到~/.bashrc
中。
我这周刚开始学习SICP。
目前,在Ubuntu Linux(9.04“jaunty”)中,MIT Scheme无法正常工作。也许将来会修复。
DrScheme可以使用,并且运行良好。您可以使用上面列出的soegard包或Neil Van Dyke的包,后者基于soegard的包,并可从http://www.neilvandyke.org/sicp-plt/获取。这个包的好处是安装后,可以使用“语言|选择语言...”菜单项选择SICP。
CHICKEN Scheme有一个sicp库,为SICP提供支持。您可以通过运行chicken-install sicp
来安装它,并在源代码开头写下这个:(use sicp)
。
chicken-install srfi-203
和 chicken-install srfi-216
。 - Ludovic Kuty我现在正在使用Chez Scheme学习SICP。这是一种相当古老的Scheme方言,因此它与SICP编写时的环境应该差别不大。
请注意,Chez Scheme项目页面提供了一个Windows二进制文件和源代码,可以在类Unix平台上构建。但如果你使用的是Mac,你可能需要执行以下操作:
brew chezscheme
man chez
假设你已经安装了homebrew,这是你真的应该做的。
为什么不用MIT Scheme?因为交互式前端是Edwin,一个使用EMACS约定的编辑器。(目前,它是一个实际的EMACS模式,尽管它曾经是用Scheme实现的。)我曾经知道基本的EMACS,但我的技能因为不用而萎缩了,这告诉我重新学习这个编辑器根本不值得麻烦。
为什么不用DrRacket?如果我看到了@frederick-squid的brew说明,我可能会尝试一下。相反,我试图遵循scheme和sicp的官方说明,但它们已经过时了。然后我试图让IDE进入scheme模式,这似乎很直观,但实际上并不是。
太麻烦了。而且我不确定我是否想要进入一个花哨的语言设计IDE,特别是一个对Scheme支持不佳的IDE引发了最初的问题。
bin/mit-scheme --library ./lib --heap 120000
<<。之后,您可以使用您“最喜欢的编辑器”进行配置。或者只需使用命令行作为repl,并从ed中加载任何文件。 - Alex Gian
#lang sicp
,你只会得到read-syntax:
#langnot enabled
的错误提示。 - Philipp Ludwig#lang sicp
,而不是在下面的提示符中输入。我之前没有意识到这一点。 - Philipp Ludwig