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

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

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

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

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

【问题讨论】:

    标签: functional-programming lisp clojure scheme sicp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      【解决方案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

                        【讨论】:

                          猜你喜欢
                          • 2010-10-30
                          • 1970-01-01
                          • 2020-11-17
                          • 2010-11-02
                          • 2018-04-09
                          • 2013-09-04
                          • 2010-09-09
                          • 2010-11-03
                          • 2011-03-05
                          相关资源
                          最近更新 更多