33

我已经抓住了真正学习函数式编程的错误。所以我的下一个自学项目是学习计算机程序的结构和解释。不幸的是,我从来没有学过 Lisp,因为我在大学时不是 CS 专业的。

虽然 SICP 不强调编程工具,但做练习需要选择一种类似 Lisp 的语言来使用。似乎Scheme的一些实施将是阻力最小的路径。另一方面,我听说其他人使用过Common LispClojure。在我看来,Common Lisp 或 Clojure 更有可能用于生产代码,因此对我的简历来说稍微好一些。顺便说一句,我完全明白学习一门语言本身是值得的,但学习一门有助于我的简历的语言仍然是一种好处。我是一个资本家,也是一个关于我的学习的学者。

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

补充:你们有没有人尝试过不使用 Scheme 来阅读 SICP?如果是这样,你的经历是怎样的?

4

18 回答 18

41

使用方案。它是现有的最简单和最容易的语言之一,您将花费很少的时间学习足够的时间来理解 SICP。了解 SICP 后,您将了解这些概念如何适用于任何语言。

于 2008-10-27T03:53:40.570 回答
22

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

于 2008-10-27T04:08:25.160 回答
9

不是直接的答案,但我希望这些信息对通过 SICP 工作的任何人都有用。一定要看看这里的视频:

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

每集一小时有20集。它们是 Abelson 和 Sussman 于 1986 年为惠普员工提供的。我把它们放在我的 iPod 上,并在通勤时观看它们。迷人。

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

于 2008-10-27T12:24:22.537 回答
5

As someone who hires people, I'll tell you that having Scheme on a resume is a good thing. Having Scheme, SML, Ocaml or Haskell on your resume suggests you are a very well rounded programmer, and quite a thinker.

That said, if you are trying for functional programming, why not Haskell instead? Scheme is multiparadigm, it can be OO, Funcitonal, Streams based, or anything else under the sun. This makes it awesome to try out new programming styles and paradigms, but if your goal is strictly functional, it can be a problem. (You will end up writing non functional code and not realizing it.)

于 2008-10-28T03:00:30.850 回答
4

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

于 2008-10-27T12:07:21.230 回答
3

书中的代码是Scheme,所以无论如何你都必须阅读它——你不妨编写它。你甚至可能喜欢它!

于 2008-10-27T04:03:44.250 回答
3

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

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

于 2008-10-27T04:59:33.730 回答
3

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

于 2008-10-27T06:42:33.787 回答
2

While you could use something other than Scheme, you'd be needlessly adding extra work and possibly cutting yourself off from fully understanding what the book is about. SICP was an introductory programming book. It is a stepping stone to deeper topics in computer science. Getting bogged down in 'translating' from Scheme to CL or Clojure would probably obscure the finer points. That would be a shame, because SICP is truly a gateway to understanding what programming is really about.

Learning Scheme is really straight forward (especially compared to both CL and Clojure) and, in fact, the introductory course as well as the book, assumes the student doesn't know it already. CL and Clojure carry considerable baggage relative to the task at hand.

于 2011-04-23T17:48:09.320 回答
2

我已经抓住了真正学习函数式编程的错误。

据我所知,SICP 不仅仅是函数式编程。

于 2008-10-27T04:46:47.860 回答
2

警告:我没有读过整本书

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

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

于 2008-10-27T04:52:08.580 回答
2

我在看 sicp 时使用了 lua

效果很好

于 2008-10-27T04:55:40.337 回答
2

使用除方案之外的任何东西。

在使用其他东西而不是方案时,您将被鼓励多思考,并避免仅仅重新输入示例的诱惑。这是一件好事。

当然,它必须足够相似,在 lisp-1 的意义上,所以 clojure 和 arc 是不错的选择。

于 2008-10-27T12:17:29.167 回答
2

我已经使用计划进行自学。向 SICP 学习的最好方法是虔诚地做所有的练习。

我已经使用Gnu guile进行计划。

于 2009-05-08T08:43:31.230 回答
1

I worked through (most) of it earlier this year, and used Common Lisp, simply because I didn't have Scheme available (don't ask).

As has already been noted, Scheme is a Lisp-1 language whereas Common Lisp is a Lisp-2. There are enough differences between the languages to mean that you have think carefully about translating the code in the book, so it forced me to really get to grips with the material.

于 2008-10-28T03:28:38.127 回答
1

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

您应该使用最能激励您的任何语言,但 99% 的通过 SICP 工作的人将使用 Scheme。

于 2008-10-27T04:53:31.090 回答
0

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

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

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

于 2011-04-22T22:09:03.020 回答
0

但是学习一门对我的简历有帮助的语言仍然是一个好处。

那么,您应该尝试使用 VB6 或 COBOL,因为那里有很多计费工作。

于 2008-10-27T04:48:14.847 回答