Dr.Racket中哪个lang数据包适合SICP?

26 scheme sicp dr.racket

我正在尝试使用SICP,我得到了一些代码.所以我开始:

#lang scheme
(word 'comp 'uter)
Run Code Online (Sandbox Code Playgroud)

返回错误:函数(字)未定义.

即使我试图将其复制到IDE(运行):

(define word?
  (let ((number? number?)
        (symbol? symbol?)
        (string? string?))
    (lambda (x)
      (or (symbol? x) (number? x) (string? x)))))
Run Code Online (Sandbox Code Playgroud)

还是一样.

我认为这可能是语言版本的某些问题或者其他问题.


以上是"简单方案",当我在SICP中引入代码时:

(define (sqrt x)
    (sqrt-iter 1.0 x))
Run Code Online (Sandbox Code Playgroud)

IDE返回sqrt-iterundefined.代码可以在第一章找到:http://mitpress.mit.edu/sicp/code/index.html

Syl*_*ter 37

在DrRacket中有一种SICP兼容性语言

1.从包管理器

文档中有一个简单的指南,介绍如何从DrRacket安装它:

  1. 打开包管理器:在DrRacket中选择菜单"文件",然后选择"包管理器...".

  2. 在"Do Do I Mean"选项卡中找到文本字段并输入:"sicp"

  3. 单击"安装"按钮.这会产生大量的输出.即使有警告,也不要担心.

  4. 测试一下.确保DrRacket在左下角有"从源确定语言".编写以下程序并单击RUN:

    #lang sicp 
    
    (inc 42) 
    ; ==> 43
    
    Run Code Online (Sandbox Code Playgroud)

这是一个使用图片语言的更高级的测试,需要包括#%require:

#lang sicp
(#%require sicp-pict)

;; paint-hires / paint-hi-res renamed to just paint
(paint (below (beside diagonal-shading
                      (rotate90 diagonal-shading))
              (beside (rotate270 diagonal-shading)
                      (rotate180 diagonal-shading))))
Run Code Online (Sandbox Code Playgroud)

单击RUN,您应该会在交互窗口中看到一个朝向中心更亮的方块.

2命令行安装

或者,您也可以通过运行以下命令从终端/ shell执行步骤1-3:

raco pkg install sicp
Run Code Online (Sandbox Code Playgroud)

从这里开始,在第一个安装说明中执行步骤4.进行测试.

3.如果raco pkg不起作用,使用星球的旧版本或DrRacket

在DrRacket中还有一个旧版本的SICP兼容性语言.虽然左下角的选择框位于"从源确定语言",但您可以添加:

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

作为定义中的唯一一行(顶部文本区域)并按下RUN它将被安装.重新启动DrRacket,您将在语言下拉菜单中找到它.祝好运.您可能会收到许多红色的错误消息.只需忽略它并重新启动DrRacket.您可能无法在语言菜单中找到该选项,但通过使用#lang planet neil/sicp它启动每个文件仍可用作模块语言.

从错误来看,它似乎与图片语言模块有关.我测试了这个片段,它仍然有效:

(paint-hires  (below (beside diagonal-shading
                             (rotate90 diagonal-shading))
                     (beside (rotate270 diagonal-shading)
                             (rotate180 diagonal-shading))))
Run Code Online (Sandbox Code Playgroud)


Yon*_* Wu 17

Sylwester的回答是我想要的.但是,我注意到Racket 6.5 增加了对SICP的直接支持.我想人们可能想知道这一点.

现在,在添加SICP支持后,可以在Racket中编写如下代码:

#lang sicp
(#%require sicp-pict)
(paint einstein)
Run Code Online (Sandbox Code Playgroud)