【问题标题】:Any suggestions for which Lisp variant to learn? [closed]关于学习哪种 Lisp 变体有什么建议吗? [关闭]
【发布时间】:2011-01-08 01:43:35
【问题描述】:

我最终想学习 Clojure,但我发现 Clojure 的学习资源对于没有经验的人来说是稀缺的......

我想知道从 Scheme(阅读 The Little SchemerSICP)或其他 Lisp 变体开始是否有益。

我唯一的其他编程经验是使用 Java 和 Python(这非常少)。我最终想在业余时间学习 Clojure,因为我觉得它很有趣,而且我的大学课程使用 Java。

【问题讨论】:

    标签: lisp clojure scheme


    【解决方案1】:

    我从 Practical Common Lisp 这本书开始,并使用 Emacs & SLIME 和 Steel Bank Common Lisp。

    【讨论】:

    • 如果您决定从 PCL 开始,您可能会对 S. Halloway 将所有编程练习移植到 Clojure 的练习感兴趣:blog.thinkrelevance.com/2008/9/16/pcl-clojure
    • 我对 Java 的所有东西都有一种非理性的过敏。我会坚持使用 SBCL,尽管我一直在考虑 ECL,以便我可以制作独立的可执行文件。
    • 去吧,我已经将批发业务转移到 Racket,因为我可以制作可执行文件。
    【解决方案2】:

    学习新事物几乎总是好的。而且,如果您只了解 Java 和 Python,那么学习一门函数式编程语言会让您大开眼界。

    Scheme 是最简单的 LISP 变体之一,并且有据可查。加油!

    【讨论】:

      【解决方案3】:

      我会选择 Scheme。它简单、简约、极其一致,可以说它比 LISP 更实用(如果你想学习一个新的范式,这很好)。我还发现 Scheme IDE 比 LISP 的用户友好得多(PLT Scheme 是一个很好的)。

      此外,Common Lisp 或 Scheme 上都有很多优秀的资源,所以这不应该是决定点。

      【讨论】:

      • 学了Scheme后发现CL看起来很丑:)
      • 是的,我也是先学Scheme的。与CL相比,它很漂亮。 CL 也有奇怪的名字。
      【解决方案4】:

      如果您刚刚起步,Stuart Halloway 的书是一个极好的资源。有几本正在制作中的新书可以早期形式下载(Clojure 的喜悦、Clojure in Action 等)。

      我也强烈推荐邮件列表和 irc 频道。尤其是 irc 频道,那里有很多乐于助人的人,而且通常很快就能回答问题。

      虽然学习 Scheme 肯定很有帮助(现在我已经使用 Clojure 一年了),但我也想说这对于学习和享受 Clojure 的乐趣是没有必要的。

      【讨论】:

      • 谢谢,我会记住这一点,可能会先去计划一下,只是为了更好地掌握 FP
      • @defn,如果你使用 Scheme,我建议使用 SICP。请记住,Scheme 对 FP 不是很严格,因此除非您考虑到这一点来查看 Scheme 文本,否则这对您的 Clojure 没有帮助。不幸的是,SICP 很长(虽然很有趣),所以它非常迂回。如果您想更快地掌握 FP,请查看以下内容:cs.chalmers.se/~rjmh/Papers/whyfp.html 我也一直在研究 Haskell。 Rich Hickey 从那里获得了很多很棒的想法,所以我也全心全意地推荐这个:learnyouahaskell.com
      • 我同意这个建议。如果您最终想学习 Clojure,只需直接学习 Halloway - 它非常容易上手。话虽如此,如果你来自主流编码背景,SICP 和 The Little Schemer &c 会让你大吃一惊,但这当然不是先决条件——你可以在进入 Clojure 之后得到它,而不会产生任何不良影响。无论如何,Little Schemer 都是关于递归的,所以它对 Clojure 没有帮助,除了可能会帮助您理解对计划者的“不要这样做”的建议。
      • 另一个同意的声音刚刚进入。编程 Clojure + IRC 频道可以让你继续前进,每个人都有多么乐于助人。掌握了基础知识后,Joy of Clojure 看起来很有希望深入了解如何真正使用该语言。
      【解决方案5】:

      【讨论】:

      【解决方案6】:

      我建议你从 Scheme 开始,然后再转向 Common Lisp,因为 Scheme 更简单。由于您是 Lisp 的新手,一个好的起点是 Dorai Sitaram 的 Teach yourself Scheme in Fixnum Days。一旦您熟悉了该语言的基础知识,您就可以开始使用 SICP。

      对于 Common Lisp,您可以遵循类似的路径:从简单的基于教程的方法开始,熟悉编写小程序,然后阅读会教您高级概念的书。我推荐以下书籍来学习 Common Lisp。请注意按给定顺序阅读它们:COMMON LISP: An Interactive Approach (Stuart C. Shapiro)、Successful Lisp (David B. Lamkins)、Practical Common Lisp (Peter Seibel) 和 On Lisp (Paul Graham)。

      Paul Graham 也写过ANSI Common Lisp,这是一个很好的参考。

      【讨论】:

        【解决方案7】:

        实际上只有两种常见的变体,Scheme 和 Common Lisp。它们非常相似,都有多种实现方式,并且两者之间的切换很容易。如果你想写一个应用程序,我会推荐 CL,因为它有更高级的库。如果你想学习 FP 风格,就用 Scheme。

        除了这里提到的书籍,我还推荐 Peter Norvig 的“人工智能编程范式:Common Lisp 中的案例研究”。

        【讨论】:

        • 现在我可能也将 Clojure 归类为常见变体......
        【解决方案8】:

        我会选择 LFE,您学习的速度与您遇到的错误数量成正比。选择 LFE 将同时获得 Erlang 和 Lisp。

        【讨论】:

        【解决方案9】:

        我赞同 dnolen 的建议,即拿起 S. Halloway 的书(我买了,它很棒)并立即学习 Clojure。

        不久前,我(部分)通过SICP 工作并且真的很挣扎。在那之后我发现 Clojure 非常简单,可能是因为我已经对 Scheme 有一点经验。不过,特别是对于已经熟悉 Java 的人,我想说直接跳入 Clojure 很酷。理由:

        • 您可以方便地访问整个 Java API 和为 Java 编写的整个库;例如,我最近为 Clojure 程序构建了一个 Swing GUI,并使用 Apache HTTP 组件进行了一些 Web 处理。
        • Clojure 试图比其他 Lisps 更“口齿不清”:典型的例子是:
          • 减少“不必要的”括号:例如
            (cond (condition) (value) (condition) (value)) 而不是
            (cond ((condition) (value)) ((condition) (value)))
          • 在一些有意义的地方使用括号以外的东西;例如letloop 等的参数列表和绑定在 [方括号] 而不是(括号)中。恕我直言,使函数定义更易于阅读。
          • 列表不是唯一的数据结构。有很好的集成
            • [vectors](像数组一样随机访问)和
            • {哈希图};
              这些让生活更轻松,尤其是如果您习惯在 Java 中使用它们。
        • 定义函数的函数是(defn)。所有人中的你们都应该欣赏这一点;)

        值得推荐的第一个教程是Moxley Stratton's Clojure Tutorial。还有一个巨大的SO discussion on Clojure tutorials 会产生很多链接。

        Clojure Cheat Sheet 是我在 Clojure 中迈出第一步时发现的非常有用的东西。这解决了您大致知道要做什么但不知道要使用哪个功能的常见情况。人们会希望其他语言采用这一概念。找到可能满足您需求的函数后,您可以在 Clojure REPL 中使用 (doc <name>) 获取更多关于它的文档。

        当然,您的里程可能会有所不同;但是到 Amazon 发布 Programming Clojure 时,我已经从 Web 上学到了足够多的 Clojure,这本书对我来说更像是“大局”的来源,而不是教程。但肯定比从那本书中学习 Clojure 编程做得更糟。


        可能从以上内容可以看出我对 Clojure 充满热情。经过多年的 Java,我发现它令人耳目一新,并且强大到足以完成任何让我发痒的事情。我什至向该项目捐款 :)

        冒着以后后悔的风险,我还通过电子邮件、Google Chat 或 Wave 提供(免费)Clojure 入门帮助和辅导。我的邮件地址应该很容易猜到。

        【讨论】:

        • 另外值得注意的是,Chris Houser 和 Fogus 正在写一本书,专门解决人们在“用 Clojure 思考”时遇到的问题。它现在可以通过 Manning Early Access Preview 获得,并将在今年秋天的某个时候发布。
        【解决方案10】:

        对于视觉/听觉学习者,我强烈推荐 Righ Hicky 在 blip.tv 上的视频系列
        Clojure for java programmers 然后点击 REPL。该系列的其余部分自然而然地进行,并且可以真正使创意源源不断。 PCL(Practical Common Lisp)是一本令人兴奋的书,尽管其中一些并不真正适用于 clojure。我强烈推荐关于宏的章节。

        【讨论】:

          【解决方案11】:

          我在你的位置上,将我的注意力分散在 Scheme 和 Common Lisp 之间。现在回想起来,我认为(为了学习 Clojure,而不是个人发展)我会更好地专注于 Common Lisp,Practical Common Lisp 和 PG 的 On Lisp

          现在有一些关于 Clojure 的实际书籍,您绝对应该选择其中一本。 Joy of Clojure 是一本很棒的书,4clojure.com 是练习使用 Clojure 解决难题的好方法。

          【讨论】:

            【解决方案12】:

            ANSI Common Lisp - OnLisp ANSI Common Lisp

            【讨论】:

              【解决方案13】:

              newLISP - 嗯...,因为它是现代的(也是唯一的 ??) 基于 LISP 的通用脚本语言? (我不计算 AutoLISP 等,因为它们是特定于域的脚本语言)。因此,如果您非常喜欢它,也许将来您会从窗口中删除 Python :-))

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2018-04-13
                • 2010-11-03
                • 2010-12-09
                • 2010-11-05
                • 2014-09-21
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多