Scheme Racket博士的SICP适合哪种语言包?
我正在尝试SICP,我得到了一些代码。 所以我从以下几点开始:Scheme Racket博士的SICP适合哪种语言包?,scheme,sicp,dr.racket,Scheme,Sicp,Dr.racket,我正在尝试SICP,我得到了一些代码。 所以我从以下几点开始: #lang scheme (word 'comp 'uter) 返回错误:函数(字)未定义 即使我尝试将其复制到IDE(运行): 还是一样 我认为这可能是语言版本或其他方面的问题 以上是“简单方案”,当我在SICP中介绍代码时: (define (sqrt x) (sqrt-iter 1.0 x)) IDE返回sqrt iter未定义。代码可在第一章中找到:[良好的开端;继续前进,您将享受该计划!] 在Scheme中,
#lang scheme
(word 'comp 'uter)
返回错误:函数(字)未定义
即使我尝试将其复制到IDE(运行):
还是一样
我认为这可能是语言版本或其他方面的问题
以上是“简单方案”,当我在SICP中介绍代码时:
(define (sqrt x)
(sqrt-iter 1.0 x))
IDE返回
sqrt iter
未定义。代码可在第一章中找到:[良好的开端;继续前进,您将享受该计划!]
在Scheme中,程序是在一个环境中开发的。环境定义了从标识符到值的映射。有些值是函数,有些值是数字等
定义一个函数:
(define (sqrt x)
(sqrt-iter 1.0 x))
标识符x
作为参数绑定到sqrt
,值1.0是一个数字,标识符sqrt iter
来自环境
要问自己的一个问题是“哪里定义了sqrt-iter
;它与什么有关?”因为它不是由您定义的,sqrt-iter
必须来自内置于您的方案或导入到您的方案中的环境。您还没有导入任何内容,并且方案中没有定义sqrt iter
(请参阅参考资料了解R5R或其他内容)。因此,sqrt iter
是未绑定的
同样的逻辑适用于每个标识符,包括您使用的word
在word?
的实现中,语法关键字let
用于引入新的绑定标识符。当您编写(数字?数字?
时,您将引入一个新的标识符数字?
(左侧)并将其绑定到来自环境的数字?
(右侧)(在方案中定义)。为此使用let
并不能真正为您带来任何好处。您的word?
代码可以实现为:
(define (word? x)
(or (symbol? x) (number? x) (string? x))) ;; number?
里面有一个
1.从包管理器
在中,有一个关于如何从DrRacket安装的简单指南:
#lang sicp
(包括第42条)
; ==> 43
#%require
中:
#lang sicp
(#%需要sicp pict)
;; paint hires/paint hi res重命名为仅绘制
(油漆(下方)(对角线阴影旁边)
(旋转90对角线着色)
(旁边(旋转270对角线着色)
(旋转180对角线着色)))
单击RUN,您应该会在交互窗口中看到一个正方形,该正方形朝中心变亮
2命令行安装
或者,您也可以通过运行以下命令从终端/外壳执行步骤1-3:
raco pkg安装sicp
从这里开始执行第4步。在第一个安装说明中对其进行测试
3.如果raco-pkg
不起作用,则使用planet的旧版本或drrack
在DrRacket中还有一个。在“从源代码确定语言”的左下角选择框中,您只需添加:
#朗星球尼尔/sicp
作为定义(顶部文本区域)中的唯一一行,然后按RUN并将其安装。重新启动DrRacket,您将在语言下拉列表中找到它。祝你好运
您可能会收到许多红色的错误消息。忽略它,重新启动DrRacket。您可能再也找不到语言菜单中的选项,但通过使用#lang planet neil/sicp
启动每个文件,它仍然可以作为模块语言使用
从错误判断,它似乎与图片语言模块有关。我测试了这个剪,它仍然有效:
(油漆租赁(下方)(对角线阴影旁边)
(旋转90对角线着色)
(旁边(旋转270对角线着色)
(旋转180对角线着色)))
正是我想要的。然而,我注意到,球拍6.5已经完成。我想人们可能想知道这一点
现在,在添加SICP支持后,可以在Racket中编写如下代码:
#lang sicp
(#%require sicp-pict)
(paint einstein)
您可以链接到正在处理的SICP部分吗?请稍候,您正在尝试运行函数word
,但将其定义为word?
。您可能希望它不会被找到……请参阅“简单方案”中的这一章:我得到了上面的代码。@cloudr3414您提供的链接不包括上面的代码。另外,这本书不是SICP。SICP书的全部内容都可以从中获得。如果您还没有定义,sqrt iter应该是未定义的。不幸的是,这似乎有点糟糕。现在尝试安装只会产生一系列错误。如果你对这个问题有一个更新的答案,那就太好了:-)@SteveHomer不幸的是,新的Racket版本不太兼容,但它们甚至可以处理错误,所以我添加了相关信息。当包转换为新的包系统时,我将进行更新。我可以包括其他文件吗(require neil/sicp/include)(include“2.39.scm”)
不起作用。@Zen因为它基于r5rs模块require
存在于\%require
的名称下,例如(#require srfi/1)
或(#%require“myfile.scm”)
。您可能需要将目录添加到收集路径。新:在您提供的url中,他们解释说,现在可以从DrRacker本身轻松完成。在软件包管理器中。感谢提供更多最新信息!我有6.5并且把#lang sicp
放在
#lang sicp
(#%require sicp-pict)
(paint einstein)