Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme Racket博士的SICP适合哪种语言包?_Scheme_Sicp_Dr.racket - Fatal编程技术网

Scheme Racket博士的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中,

我正在尝试SICP,我得到了一些代码。 所以我从以下几点开始:

#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安装的简单指南:

  • 打开软件包管理器:在DrRacket中选择菜单“文件”,然后选择“软件包管理器…”

  • 在“按我的意思做”选项卡中,找到文本字段并输入:“sicp”

  • 单击“安装”按钮。这产生了大量的输出。即使有警告,也不要担心

  • 测试一下。确保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)