Lisp SICP的Dr Racket问题

Lisp SICP的Dr Racket问题,lisp,scheme,racket,sicp,Lisp,Scheme,Racket,Sicp,我正在通过SICP工作。目前,在第一章中,我很难让Racket让我重新定义“原语”。例如,我的印象是我应该能够任意执行(define+5),这很好,或者重新定义sqrt过程。相反,我得到的是: define-values: cannot change constant variable: + 我的语言当前设置为R5RS,我的印象是R5RS将解决与SICP的兼容性问题。在语言面板中,您需要禁用“不允许重新定义初始绑定”。这解决了问题。即使可能,如果不真正了解系统将如何对此作出反应,则不应进行此类

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

define-values: cannot change constant variable: +

我的语言当前设置为R5RS,我的印象是R5RS将解决与SICP的兼容性问题。

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

即使可能,如果不真正了解系统将如何对此作出反应,则不应进行此类重新定义。例如,如果您重新定义
+
,其他代码是否会中断?在Racket的例子中,答案是“否”——但这是因为你没有真正重新定义
+
:相反,你定义了一个新的
+
,只有你的代码才能使用


至于语言的选择——Rackets R5RS模式是一种非常严格的模式,它不是您通常想要使用的。要获得一个更为SICP友好的环境,请参阅Neil Van Dyke's,它将为您提供专门为本书设计的语言。(IIRC,它甚至有书中展示的图形语言。)

我在这里尝试使用RSA示例时遇到了问题(这是SICP的一部分):

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

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

#lang planet neil/sicp
然后打“跑”

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

3) 安装完毕后,关闭DrRacket

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


祝你好运

实际上,我最终还是安装了Neil Van Dyke的软件包,这样我就可以支持图片语言和流。起初,我只是对我不能完成书中的一些例子感到恼火。谢谢这个(define+5)现在可以在我的机器(Ubuntu 12.04)上使用DrRacket 5.1.3了。他们是否更改了默认设置?您好,在我的办公室,站点被阻止,因此我无法通过DrRacket下载SICP支持模块。有没有办法直接下载文件,然后手动将文件安装到DrRacket?谢谢