我正在通过SICP工作。目前,在第一章中,我遇到了遇到球拍的问题,让我重新定义“原语”。例如,我的印象是我应该可以任意地做 (define + 5) 那很好,或重新定义 sqrt 程序。相反,我明白了:

define-values: cannot change constant variable: +

我目前有将R5RS设置为R5RS的语言,而我的印象将会照顾SICP的兼容性问题。

有帮助吗?

解决方案

即使可能,此类重新定义也不是您应该做的事情,而无需真正理解系统将如何对此做出反应。例如,如果您重新定义 +, ,是否有其他代码中断?在球拍的情况下,答案是“否” - 但这是因为您真的没有重新定义 +: :相反,您定义了 新的 +, ,只有您的代码才能使用。

至于语言选择 - 球拍R5RS模式是非常严格的,它通常不是您想要使用的。为一个 很多 更适合SICP的环境,请参阅Neil Van Dyke的 SICP支持页面 这将为您提供专门为本书制作的语言。 (IIRC,它甚至具有书籍炫耀的图形语言。)

其他提示

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

为了获得这个工作,我必须这样做:

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

#lang planet neil/sicp

然后击中“运行”

2)享受Drracket非常用户友好的,自动下载并通过咖啡来安装尼尔模块;-)

3)然后安装后,关闭Drracket。

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

祝你好运!

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top