Dret博士对SICP的问题

Jos*_*sto 30 lisp scheme sicp racket

我正在通过SICP工作.目前,在第一章中,我遇到了让Racket重新定义"原语"的问题.例如,我的印象是我应该可以任意做(define + 5),这样就可以了,或重新定义sqrt程序.相反,我明白了:

define-values: cannot change constant variable: +
Run Code Online (Sandbox Code Playgroud)

我的语言目前设置为R5RS,我认为这样可以解决与SICP的兼容性问题.

Eli*_*lay 35

即使可能,这种重新定义也不是你应该做的事情,如果没有真正理解系统将如何对此作出反应.例如,如果重新定义+,其他代码是否会中断?在Racket案例中的答案是"不" - 但这是因为你没有真正重新定义+:相反,你定义了一个新的 +,只有你的代码可以使用.

至于语言选择 - Rackets R5RS模式是一个非常严格的模式,并不是你通常想要使用的模式.对于很多更SICP友好的环境,看到尼尔·范戴克的SICP支持页面这将为您提供专门为这本书做了一个语言.(IIRC,它甚至还有图书显示的图形语言.)


jps*_*ain 20

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

要实现这一点,我必须这样做:

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

#lang planet neil/sicp
Run Code Online (Sandbox Code Playgroud)

然后点击"运行"

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

3)然后一旦安装完毕,关闭DrRacket.

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

祝好运!


Jos*_*sto 11

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