Scheme 如何在SICP中键入练习的代码?

Scheme 如何在SICP中键入练习的代码?,scheme,sicp,mit-scheme,Scheme,Sicp,Mit Scheme,我一直在使用print eval循环,但我应该使用其他的吗?REPL是执行此操作的地方,是的 大多数人在命令行中使用REPL之上的东西,例如emacs。我使用xscheme一个emacs库。在我看来,替代方案不是很好,仅使用命令行是不能容忍的。使用DrRacket。在这里下载:您可以在GNU Guile Scheme中编写脚本来实现SICP中的练习。大多数内置过程都可以正常工作,并且在语法上没有差异 在Linux中 在脚本文件的开头使用shebang符号编写脚本 #!/usr/\ -e-s !

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

REPL是执行此操作的地方,是的


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

使用DrRacket。在这里下载:

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


在Linux中

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

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


一个例子

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

使用
chmod+
使文件可执行并运行它/


p.S.方案文件使用.scm文件扩展名保存。

如果使用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空间摆脱它,或者用它做点什么
  • C-w切割该区域
  • C-k从光标开始剪切线
  • C-y粘贴
  • C-x C-e直接在scratch/repl缓冲区(默认窗口)中的光标后面执行代码行
  • C-C-C停止使用C-x C-e运行的某个程序的执行
  • C-x C-C退出

这就足够开始使用Edwin了。能够编辑您的函数定义,重新评估您编辑的定义,并让新版本在您的repl环境中运行,这是一件令人难以置信的好事。

使用,并在其中使用,以访问repl并帮助编辑方案文件。它还可以轻松地处理各种Scheme repl,如、、和。

如果您熟悉emacs,请尝试geiser,它是一个极好的环境,您可以在编写代码时对代码进行评估;与诡计、小鸡和球拍配合使用。在我了解geiser之前,我习惯于在击键下使用shell缓冲区(在emacs中也是如此),只需复制粘贴在另一个缓冲区中编写的代码片段(我仍然使用irb和js)。另一种方法是使用它会抛出一个错误,即main是未绑定的符号,您需要使用
(define(main args))
更正了脚本。M-o用于加载缓冲区,C-x C-s用于保存缓冲区,C-C-s用于切换到REPL