您将使用哪种语言进行SICP的自学?

时间:2008-10-27 03:41:28

标签: functional-programming lisp clojure scheme sicp

我发现了学习函数式编程的错误。所以我的 下一个自学项目是通过Structure and Interpretation of Computer Programs。不幸的是,我从来没有 我学习了Lisp,因为我不是大学的CS专业。

虽然SICP没有强调编程工具,但是做了 练习需要选择一种类似Lisp的语言。这好像是 Scheme的某些实现将是最少的路径 抵抗性。另一方面,我听说其他人使用了Common LispClojure。在我看来,Common Lisp或Clojure会是 更有可能在生产代码中使用,因此略有用处 我的简历更好。顺便说一句,我完全得到了学习a的论点 语言本身是值得的,但学习一种语言 帮助我的简历仍然是一个好处。我是资本家和学者 关于我的学习。

如果您必须自学SICP,您会选择哪种语言?为什么? 理想情况下,我想使用可以在JVM上运行的语言。 我当然可以使用REPL与bash一起工作的语言 和emacs。

附加:你们有没有尝试过不使用Scheme阅读SICP?如果是这样,你的经历是什么样的?

18 个答案:

答案 0 :(得分:40)

使用Scheme。它是现存最简单,最简单的语言之一,您将花费很少的时间学习它以理解SICP。一旦理解了SICP,您将看到这些概念如何适用于任何语言。

答案 1 :(得分:22)

使用 DrScheme 。正如其他人所说,Scheme是一种简单的语言,DrScheme是一个很好的使用它的环境,其中有很多支持和中等到良好的文档。

答案 2 :(得分:9)

不是直接的答案,但我希望这些信息对于通过SICP工作的任何人都有用。请务必查看视频:

http://swiss.csail.mit.edu/classes/6.001/abelson-sussman-lectures/

每集有20集,每集一小时。他们于1986年由Abelson和Sussman为Hewlett Packard员工颁发。我把它们放在我的iPod上并在通勤时观看它们。迷人。

此外,本书的全文可在http://mitpress.mit.edu/sicp/

在线获取

答案 3 :(得分:4)

作为雇用员工的人,我会告诉你,在简历上使用Scheme是一件好事。在你的简历中有Scheme,SML,Ocaml或Haskell表明你是一个非常全面的程序员,而且是一个思想家。

那就是说,如果你正在尝试函数式编程,为什么不用Haskell呢? Scheme是多范式的,它可以是OO,Funcitonal,Streams,或者在阳光下的任何其他东西。这使得尝试新的编程风格和范例变得非常棒,但如果你的目标是严格的功能,那么它可能是一个问题。 (你最终会编写非功能代码而没有实现它。)

答案 4 :(得分:4)

我同意你应该使用Scheme。但是,如果你真的有使用Common Lisp或Clojure的痒,我会选择后者。 Scheme和Clojure都是Lisp-1,所以书中的代码在两者之间会更加一致(尾部调用除外,但如果你理解如何补偿你就没问题)。 Common Lisp是一个Lisp-2,可能会掩盖SICP试图教你的美丽。

答案 5 :(得分:3)

本书中的代码是Scheme,因此无论如何你都必须阅读它 - 你也可以写它。你甚至可能喜欢它!

答案 6 :(得分:3)

我认为Clojure非常适合您想做的事情。它比Scheme更具功能性,因为数据结构是不可变的,并且它在JVM上运行时非常有用。但是,请注意,无论如何,您最终都会学习Scheme,以便能够理解本书中的代码。

答案 7 :(得分:3)

要从书中获得真正的价值,您必须使用Scheme。方案的哪种实施取决于您当前的环境:

Windows - 博士计划(PLT计划) - http://download.plt-scheme.org/ Linux - 如果这是一个远程帐户 - 您可以考虑使用MZScheme(PLTScheme)(http://download.plt-scheme.org/),否则如果这是Linux的本地实例,您将需要使用Dr Scheme。

答案 8 :(得分:2)

当我看到sicp时,我用了lua

效果很好

答案 9 :(得分:2)

警告:我还没看过整本书

由于示例依赖于闭包和延续,因此使用具有这两种功能的语言会更好,否则您需要自己实现它们。

例如,在Scheme中编写metacircular评估器会利用Scheme提供闭包和延续的事实。

答案 10 :(得分:2)

使用除计划之外的任何东西。

在使用其他方式然后进行计划时,我们会鼓励您多思考,并避免仅重新键入示例的诱惑。这是件好事。

当然,它必须足够相似,在lisp-1意义上,所以clojure和arc很好。

答案 11 :(得分:2)

  

我发现了学习函数式编程的错误。

从我所听到的来看,SICP不仅仅是函数式编程。

答案 12 :(得分:2)

我使用方案进行自学。从SICP学习的最好方法是彻底地做所有的练习。

我使用Gnu guile作为计划。

答案 13 :(得分:2)

虽然您可以使用Scheme之外的其他内容,但您不必要地添加额外的工作,并可能使自己完全无法理解本书的内容。 SICP是一本入门编程书。它是计算机科学更深层次主题的踏脚石。陷入“翻译”的困境从Scheme到CL或Clojure可能会模糊更精细的点。这将是一个耻辱,因为SICP真正是理解编程真正意义的门户。

学习计划非常简单(特别是与CL和Clojure相比),事实上,入门课程和书籍假定学生已经不知道。 CL和Clojure相对于手头的任务承担了相当大的责任。

答案 14 :(得分:1)

  

我听说过其他人使用过Common Lisp和Clojure。

你应该使用最能激励你的语言,但99%通过SICP工作的人会使用Scheme。

答案 15 :(得分:1)

我今年早些时候完成了大部分工作,并使用了Common Lisp,因为我没有使用Scheme(不要问)。

正如已经注意到的,Scheme是一种Lisp-1语言,而Common Lisp是一种Lisp-2。语言之间有足够的差异意味着你仔细考虑翻译书中的代码,所以它迫使我真正掌握了这些材料。

答案 16 :(得分:0)

  

但学习一种有助于我的简历的语言仍然是一种好处。

你应该尝试使用VB6或COBOL,因为有一个很多的结算工作。

答案 17 :(得分:0)

我认为Scheme是自然的选择(因为它是SICP的“原生”语言)

然而,由于SICP的真正价值来自概念而不是特定语言的机制,我认为用任何类似Lisp的语言尝试它是一种有价值的学习练习。我亲自尝试过Clojure中的一些练习,但它们的翻译都非常好。

对于那些感兴趣的人,有一个正在进行的项目来创建Clojure translation of SICP