我正在通过SICP工作。目前,在第一章中,我遇到了让球拍让我重新定义“原语”的问题。例如,我的印象是我应该能够任意地做(define + 5),这将是很好的,或者重新定义sqrt过程。相反,我得到了这样的结论:
define-values: cannot change constant variable: +我目前将语言设置为R5RS,我的印象是它可以解决与SICP的兼容性问题。
发布于 2010-08-30 13:34:22
即使可能,在没有真正了解系统对此做出反应的情况下,您也不应该进行这样的重新定义。例如,如果重新定义+,还会有其他代码中断吗?在because的例子中,答案是“否”--但这是因为您并没有真正重新定义+:而是定义了一个新的+,只有您的代码才能使用它。
至于语言选择--球拍R5RS模式是一个非常严格的模式,您通常不会想要使用它。要获得更友好的SICP环境,请参阅Neil Van Dyke的SICP Support page,它将为您提供专为本书设计的语言。(IIRC,它甚至拥有书中所展示的图形语言。)
发布于 2011-05-18 09:18:16
我在这里的RSA示例中遇到了问题( SICP内容的一部分):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html
为了让它正常工作,我必须这样做:
1)通过将以下内容添加到空白文件的顶部来运行初始下载:
#lang planet neil/sicp然后点击"Run“
2)享受DrRacket非常友好的用户界面,自动下载并安装PLaneT Neil模块,只需去喝杯咖啡;-)
3)安装完成后,关闭DrRacket。
4)重新打开,在choose A Language列表中选择SICP PLaneT 1.15。
(除了执行初始下载之外,我无法在顶部添加声明来为我工作。)
祝好运!
发布于 2010-08-30 12:32:34
在“语言”面板中,您需要禁用“禁止重新定义初始绑定”。这就解决了这个问题。
https://stackoverflow.com/questions/3597781
复制相似问题