题
我正在通过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。
(除了这样做以执行初始下载之外,我无法在顶部添加声明为我工作。)
祝你好运!
在语言面板中,您需要禁用“禁止重新定义初始绑定”。这解决了问题。
不隶属于 StackOverflow