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 博士问题的主要内容,如果未能解决你的问题,请参考以下文章