你会用哪种语言自学SICP? [关闭]

Posted

技术标签:

【中文标题】你会用哪种语言自学SICP? [关闭]【英文标题】:Which language would you use for the self-study of SICP? [closed] 【发布时间】:2010-09-19 08:03:25 【问题描述】:

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

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

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

补充:你们有没有人尝试过在不使用 Scheme 的情况下阅读 SICP?如果有,您的体验如何?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

昨晚下载的,UI看起来超级简单好用。 艾伦,别忘了使用 PLaneT 提供的 SICP 支持(用户为 PLT Scheme/DrScheme 贡献了库)。 planet.plt-scheme.org/package-source/neil/sicp.plt/1/13/… DrScheme 现在被称为 DrRacket en.wikipedia.org/wiki/DrRacket【参考方案3】:

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

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

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

另外,本书全文可通过http://mitpress.mit.edu/sicp/在线获取

【讨论】:

【参考方案4】:

作为一个招聘人员,我会告诉你,在简历中加入 Scheme 是一件好事。简历中包含 Scheme、SML、Ocaml 或 Haskell 表明你是一个非常全面的程序员,并且是一个相当有思想的人。

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

【讨论】:

【参考方案5】:

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

【讨论】:

顺便说一句,解决 Clojure 中的尾调用优化问题是递归的:clojure.org/special_forms#toc10(并要求 Sun 在 JVM 中实现它们,它们应该在哪里)【参考方案6】:

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

【讨论】:

【参考方案7】:

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

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

【讨论】:

我还将 MIT 计划添加到该列表中。他们似乎有一个很好的(如果很大的话)口译员。 (奖金(积分)(写麻省理工学院(书)))【参考方案8】:

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

【讨论】:

【参考方案9】:

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

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

【讨论】:

【参考方案10】:

警告:我没有读过整本书

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

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

【讨论】:

IIRC,续集在书中并没有真正突出。【参考方案11】:

我在看 sicp 的时候用的是 lua

效果不错

【讨论】:

我也在尝试这样做。我知道 Lua 缺乏完整的延续和宏。那些缺失的部分对 SICP 是否至关重要(尤其是最后几章)?或者还有其他我不知道的缺失部分? 不,不是。由于语法不同,有些事情你必须采取不同的方法,但解决方案通常看起来非常相似。【参考方案12】:

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

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

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

【讨论】:

我不同意。也许其他教科书也是如此,但我个人发现 SICP 的练习不仅仅是简单地复制之前的示例。 我认为它是双向的以不同的方式。【参考方案13】:

我在自学中使用了方案。学习 SICP 的最佳方式是虔诚地完成所有练习。

我已使用Gnu guile 进行方案。

【讨论】:

【参考方案14】:

虽然您可以使用 Scheme 以外的其他东西,但您会不必要地添加额外的工作,并可能使自己无法完全理解这本书的内容。 SICP 是一本介绍性的编程书籍。它是通向计算机科学更深层次主题的垫脚石。陷入从 Scheme 到 CL 或 Clojure 的“翻译”中可能会掩盖更精细的点。那将是一种耻辱,因为 SICP 确实是了解编程真正意义的门户。

学习方案非常简单(尤其是与 CL 和 Clojure 相比),事实上,入门课程和书籍一样,假设学生还不知道。相对于手头的任务,CL 和 Clojure 承载了相当多的包袱。

【讨论】:

【参考方案15】:

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

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

【讨论】:

【参考方案16】:

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

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

【讨论】:

【参考方案17】:

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

您应该尝试使用 VB6 或 COBOL,因为那里有大量的计费工作。

【讨论】:

是的,仍然需要 COBOL 程序员,但是……这是一个关于函数式编程的问题,而不是关于 COBOL 的问题。 @Alan: 我猜这个回复是讽刺的:)【参考方案18】:

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

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

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

【讨论】:

以上是关于你会用哪种语言自学SICP? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2框架是用哪种语言开发的? [关闭]

自学Java用哪本书好?

Boxee.tv IPTV软件用哪种语言开发?

在PHP开发中,你会用哪一种加密的方法!!!

python和java哪个比较适合做自动化测试,和测试开发一般用哪种语言。

我刚刚买了itop4412 开发板,基于Android操作系统,linux-QT系统都用哪种语言开发应用程序呢?