SICP 的 Racket 博士问题

Posted

技术标签:

【中文标题】SICP 的 Racket 博士问题【英文标题】:Dr Racket problems with SICP 【发布时间】:2011-04-05 14:18:11 【问题描述】:

我正在通过 SICP 工作。目前,在第一章中,我无法让 Racket 让我重新定义“原始”。例如,我的印象是我应该能够任意执行(define + 5),这很好,或者重新定义sqrt 过程。相反,我得到了这个:

define-values: cannot change constant variable: +

我目前将语言设置为 R5RS,我认为它会解决与 SICP 的兼容性问题。

【问题讨论】:

这(define + 5)实际上现在可以在我的机器(Ubuntu 12.04)上使用 DrRacket 5.1.3。他们是否更改了默认设置? 【参考方案1】:

即使可能,如果您不真正了解系统将如何对此做出反应,您也不应该进行此类重新定义。例如,如果您重新定义+,是否会出现其他代码中断?在 Racket 的情况下,答案是“否”——但这是因为您并没有真正重新定义 +:相反,您定义了一个 new +,它只有您的代码可以用。

至于语言选择——Rackets R5RS 模式是一种非常严格的模式,通常不是您想要使用的。如需更多对 SICP 更友好的环境,请参阅 Neil Van Dyke 的 SICP Support page,它将为您提供专为本书设计的语言。 (IIRC,它甚至拥有书籍所展示的图形语言。)

【讨论】:

实际上我最终还是安装了 Neil Van Dyke 的包,这样我就可以支持图片语言和流。最初,我只是因为无法完成书中的一些示例而感到恼火。谢谢!【参考方案2】:

我在尝试通过此处的 RSA 示例工作时遇到了问题(SICP 内容的一部分):http://mitpress.mit.edu/sicp/psets/ps3/readme.html

为了让这个工作我必须这样做:

1) 通过将其添加到空白文件的顶部来运行初始下载:

#lang planet neil/sicp

然后点击“运行”

2) 去喝杯咖啡,享受 DrRacket 非常用户友好的自动下载和安装 PLaneT Neil 模块;-)

3) 安装完成后,关闭 DrRacket。

4) 重新打开,然后从选择语言列表中选择 SICP PLaneT 1.15。 (除了执行初始下载之外,我无法在顶部添加声明来为我工作。)

祝你好运!

【讨论】:

嗨,在我的办公室里,http://planet.racket-lang.org 站点被阻止,所以我无法通过 DrRacket 下载 SICP 支持模块。有什么办法可以直接下载文件,然后手动将文件安装到 DrRacket?谢谢。【参考方案3】:

在语言面板中,您需要禁用“不允许重新定义初始绑定”。这解决了问题。

【讨论】:

以上是关于SICP 的 Racket 博士问题的主要内容,如果未能解决你的问题,请参考以下文章

Racket 博士有自动完成功能吗?

安装Emacs并设置racket环境

DrRacket 基本过程引用问题

为啥 Common Lisp 在没有引号的情况下评估符号本身?

为啥 Racket 中缺少单臂“如果”?

在 Racket 中设置默认参数值