【问题标题】:How do I type the code to the exercises in SICP?如何在 SICP 中输入练习代码?
【发布时间】:2016-07-18 12:02:32
【问题描述】:

我一直在使用 print eval 循环,但我应该使用其他的吗?

【问题讨论】:

  • 如果您熟悉 emacs,请尝试 geiser,这是一个很棒的环境,您可以在编写代码时对其进行评估;适用于诡计、鸡和球拍。在我知道 geiser 之前,我曾经在击键下有 shell 缓冲区(在 emacs 中也是如此),并且只是复制粘贴在另一个缓冲区中编写的代码片段(我仍然使用 irb 和 js 来做)。
  • 另一种方法是使用DrRacket IDE

标签: scheme sicp mit-scheme


【解决方案1】:

使用 DrRacket。在这里下载:http://download.racket-lang.org/

【讨论】:

    【解决方案2】:

    REPL 是这样做的地方,是的。

    大多数人在命令行中使用 REPL 之上的东西,例如 emacs。我使用 xscheme 一个 emacs 库。我认为替代方案不是很好,仅使用命令行是不能容忍的。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Racket,请使用 DrRacket。

      如果您使用的是 MIT Scheme,您可能希望使用 Edwin,它是 Emacs 与 Mit Scheme 捆绑的衍生产品,SICP 最初是为该方案实现而构建的。 Edwin 是 emacs 的衍生产品,所以如果你已经了解 Emacs,你会和 Edwin 相处得很好。如果你不了解 emacs,基础知识是:

      • C-f、C-b、C-n 和 C-p 分别表示向前、向后、向上和向下。
      • C-Space 开始选择区域(突出显示要操作的一段文本)。该区域将一直保留在那里,直到您使用 C-Space 将其删除或对其进行处理。
      • C-w 剪切区域
      • C-k 从光标开始剪切线
      • C-y 粘贴
      • C-x C-e 在暂存/复制缓冲区(默认窗口)中直接执行光标后面的代码行
      • C-c C-c 停止执行你用 C-x C-e 运行的东西
      • C-x C-c 退出

      这应该足以开始使用 Edwin。能够只编辑函数的定义,重新评估您编辑的定义,并让新版本开始在您的 repl 环境中运行,这真是太好了。

      【讨论】:

      • M-o 加载缓冲区,C-x C-s 保存缓冲区,C-c C-s 切换到REPL etc.
      【解决方案4】:

      使用Emacs,并在其中使用Geiser 来访问REPL 并帮助编辑方案文件。它还可以轻松处理各种 Scheme REPL,例如 Chez SchemeRacketMIT SchemeGuileChickenGambitChibi Scheme

      【讨论】:

        【解决方案5】:

        您可以在 GNU Guile Scheme 中编写脚本来实现 SICP 中的练习。大多数内置程序都可以正常工作,并且语法没有区别。


        在 Linux 中,

        在脚本文件的开头使用shebang符号编写脚本

        #!/usr/.. \
        -e -s
        !#


        一个例子

        #!/usr/local/bin/guile \
        -e main -s
        !#
        (define main (args)
        (display (+ 3 4))
        (newline))
        

        使用chmod + <filename> 使文件可执行并运行它。/

        附:方案文件使用 .scm 文件扩展名保存。

        【讨论】:

        • 这会抛出main is unbound symbol的错误,你需要使用(define (main args)
        • 更正了脚本。
        猜你喜欢
        • 2012-07-05
        • 2011-11-05
        • 2017-02-03
        • 2010-12-26
        • 2012-12-15
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多