【问题标题】:What is the best Scheme implementation for working through SICP?通过 SICP 工作的最佳方案实施是什么?
【发布时间】:2010-09-20 14:45:01
【问题描述】:

我一直在使用PLT Scheme,但它有一些问题。有谁知道通过 SICP 工作的更好实施方式?

【问题讨论】:

    标签: lisp scheme sicp


    【解决方案1】:

    使用Racket(以前的 PLT 方案)。

    DrRacket IDE 是所有方案(包括 SICP)的绝佳起点。

    要在文档中查找关键字,请将光标放在关键字上并按 F1。在 DrRacket 中,您现在可以直接在 REPL(读取评估打印循环)中查看图像。

    SICP Support for DrRacket,作者:尼尔·范·戴克。

    更新(2016 年):新的 SICP 包位于 http://pkgs.racket-lang.org/#[sicp] 使用包管理器(在 DrRacket 中)下载它或使用racoManual

    Update2 (2016):另外,如果您想尝试 SICP 图片语言的新实现,请下载sicp-pict2.rkt


    Update3 (2020):sicp-lang 包包括 sicp 语言和 sicp 图片语言的实现。

    文档:SICP Support for DrRacket
    源代码:sicp-lang on GitHub
    球拍包:@​​987654328@

    注意:图片语言比书中描述的图片语言有更多的功能(例如颜色和更大的尺寸)。来源包含示例:https://github.com/sicp-lang/sicp/blob/master/sicp-pict/main.rkt

    【讨论】:

    • 注意:Neil van Dyke 为 Racket 编写了一个非常好的 SICP 包。用这个代替我的旧的。
    • hmm OP 询问了 PLT Scheme,它成为 DrScheme,然后是 DrRacket,最后是 Rocket lang。
    • 警告:无法安全地安装 SICP 支持包。当您运行该代码 (#lang planet neil/sicp) 时,它会尝试通过纯 http 下载内容,因此可能会发生中间人攻击。当下载将在您的机器上执行的代码时,这很重要。该页面无法通过 https 访问,这也意味着您可以获取任何内容而不是内容。我希望作者能在某个时候修复它。
    • 别担心。 SICP 包已从 PLaneT 移至 pkgs.racket-lang.org。
    • @soegaard 好的,我想通了。您必须在上部窗口中键入#lang sicp,而不是在下部窗口的提示符处。我没有意识到这一点。
    【解决方案2】:

    我现在正在使用 Chez Scheme 处理 SICP。这是一个相当古老的 Scheme 方言,所以大概与 SICP 的写法相距不远。

    请注意,Chez Scheme 项目页面链接了可在类 Unix 平台上构建的 Windows 二进制文件和源代码。但是,如果您使用的是 Mac,您可能会想要这样做

    brew chezscheme
    man chez
    

    假设你有homebrew,你真的应该这样做。

    为什么不是 MIT 计划?因为交互式前端是 Edwin,一个使用 EMACS 约定的编辑器。 (目前,它是一个真正的 EMACS 模式,它曾经在 Scheme 中实现。)我曾经了解基本的 EMACS,但我的技能因废弃而萎缩,这告诉我重新学习这个编辑器是不值得的。

    为什么不 DrRacket?如果我看过 @frederick-squid 的 brew 说明,我可能会尝试一下。相反,我尝试遵循严重过时的 scheme 和 sicp 的官方说明。然后我尝试让 IDE 进入方案模式,这似乎很直观,但实际上并非如此。

    太麻烦了。而且我不确定我是否想进入一个花哨的语言设计 IDE,尤其是一个对 Scheme 支持不佳的 IDE 引发了最初的问题。

    【讨论】:

    • 您不必使用 Edwin 来运行 MIT-Scheme。 Edwin 只是在命令行脚本中指定为一个选项,您可以对其进行更改。我在 Emacs(24) 下运行 MIT-Scheme,设置为默认方案实现,以便 M-x 'run-scheme' 立即启动我想要的 MIT 环境(mechanics/scmutils)。如果您稍微考虑一下,这非常容易。带有“#lang sicp”选项的 Dr Racket 界面也非常好,我们已经从糟糕的过去中走了很长一段路……(所有这些都在 Ubuntu 上,16.04 LTS)
    • 你注意到我说我不想重新学习EMACS了吗?如果你能指出我可以用来将 MIT Scheme 与我最喜欢的编辑器集成的命令行文档,那将是有用的信息。
    • 抱歉,我手头没有文档,但 MIT-Scheme 不与任何编辑器绑定。如果你 cd 到你的 mit-scheme 安装目录(里面只有一个 bin 和一个 lib 目录),下面的命令应该能让你继续前进:>> bin/mit-scheme --library ./lib --heap 120000
    • 所以,与其说“你必须使用 edwin”,我应该说“你必须使用 edwin,除非你愿意使用一个复杂的、无证的 hack。”谢谢指正。
    【解决方案3】:

    这在 macOS 上完成令人惊讶地烦人。假设你有 Homebrew,这是它今天的工作方式。 (可能想偶尔运行brew update)。

    brew cask install racket
    raco setup  # might be optional
    raco pkg install sicp
    

    现在您可以(require sicp) 或直接运行

    racket -l sicp --repl
    

    您可能希望将其缩写为scheme。在 bash 中是这样的

    alias scheme='racket -l sicp --repl'
    

    您可以将其添加到您的~/.bashrc

    【讨论】:

      【解决方案4】:

      CHICKEN Scheme 有一个sicp library,它为 SICP 提供支持。您可以通过运行chicken-install sicp 并在源代码开头写下以下内容来安装它:(use sicp)

      【讨论】:

      • 对于 CHICKEN Scheme 5.2.0,我们使用两个 SRFI:203 和 216。chicken-install srfi-203chicken-install srfi-216
      【解决方案5】:

      我这周刚开始做 SICP。

      目前,MIT 方案在 Ubuntu Linux(9.04 “jaunty”)中被破解。将来可能会起作用。

      DrScheme 正在运行,并且运行良好。您可以使用上面列出的 soegard 的包或 Neil Van Dyke 的包,它基于 soegard 的包,可从http://www.neilvandyke.org/sicp-plt/ 获得。这个包的好处是,安装后,您可以使用 Language|Choose Language.... 菜单项来选择 SICP。

      【讨论】:

        【解决方案6】:

        PLT Scheme 工作得很好,或者 MIT Scheme 正如 Keparo 所建议的那样。你有什么问题?

        【讨论】:

          【解决方案7】:

          MIT/GNU Scheme,只需确保您加载了 SICP 兼容性package(是的,它们提供了特定的库来增强 SICP 练习的保证)。

          【讨论】:

            【解决方案8】:

            使用MIT Scheme

            它由 SICP 的作者推荐,并在 MIT 用于6.001:计算机程序的结构和解释课程。

            【讨论】:

            猜你喜欢
            • 2017-11-19
            • 1970-01-01
            • 2017-05-17
            • 2019-01-29
            • 1970-01-01
            • 2011-08-22
            • 2017-12-18
            • 2022-11-09
            • 1970-01-01
            相关资源
            最近更新 更多