有关Lisp变体学习的任何建议吗?

时间:2010-01-22 04:45:12

标签: lisp clojure scheme

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

我想知道开始使用Scheme(阅读The Little SchemerSICP)或其他一些Lisp变种是否有益。

我唯一的其他编程经验是Java和Python(这是非常小的)。我最终想在我的休息时间学习Clojure,因为我发现它非常吸引人,我的大学课程使用Java。

13 个答案:

答案 0 :(得分:15)

如果你刚刚开始,Stuart Halloway的书是一本很好的资源。工作中有几本新书可以早期下载(Clojure的欢乐,Clojure in Action等)。

另外,我强烈推荐邮件列表以及irc频道。特别是irc频道,那里有很多乐于助人的人,问题通常会很快得到解答。

虽然学习计划肯定是有帮助的(现在我已经和Clojure一起玩了一年),但我也会说这对学习和玩Clojure来说是不必要的。

答案 1 :(得分:9)

我会选择Scheme。它简单,简约,极其一致,可以说它比LISP功能更强大(如果你想学习一个新的范例,那就更好了)。我还发现Scheme IDE比LISP更加用户友好(PLT Scheme是一个很好的)。

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

答案 2 :(得分:9)

答案 3 :(得分:8)

我是第二个dnolen建议抓住S. Halloway的书(我买了它,它很棒)并立即学习Clojure。

我曾经(部分)通过SICP一段时间后来努力工作。之后我发现Clojure非常简单,可能是因为我已经对Scheme有了一些经验。尽管如此,特别是对于已经熟悉Java的人来说,我会说直接进入Clojure很酷。理由:

  • 您可以方便地访问整个Java API以及为Java编写的整个库;例如,我最近为Clojure程序构建了一个Swing GUI,并使用Apache HTTP组件进行一些Web争论。
  • Clojure试图比其他Lisps更少“lispy”:例如:
    • 减少“不必要的”括号:例如
      (cond (condition) (value) (condition) (value))而不是 (cond ((condition) (value)) ((condition) (value)))
    • 在一些有意义的地方使用括号以外的东西;例如letloop等的参数列表和绑定在[方括号]而不是(括号)中。使函数定义更容易阅读恕我直言。
    • 列表不是唯一的数据结构。有很好的整合
      • [向量](随机可访问的数组)和
      • {包含HashMap};
        这些使生活更轻松,特别是如果您习惯使用Java语言。
  • 定义函数的功能是 (defn) 。你们所有人都应该欣赏;)

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

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

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


从上面可以看出,我对Clojure充满热情。经过多年的Java,我发现它有点令人耳目一新,并且足以完成任何让我感到困扰的事情。我甚至捐赠给了这个项目:)

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

答案 4 :(得分:7)

我从实用Common Lisp一书开始,使用Emacs&amp; amp; SLIME与Steel Bank Common Lisp。

答案 5 :(得分:3)

我建议您从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也写了ANSI Common Lisp,这是一个很好的参考。

答案 6 :(得分:1)

学习新东西几乎总是好的。如果您只了解Java和Python,那么学习函数式编程语言会让您大吃一惊。

Scheme是最简单的LISP变体之一,并且已有详细记录。去吧!

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

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

现在有专注于Clojure的实际书籍,你绝对应该选择其中一本。 Clojure的喜悦是一本很棒的书,4clojure.com是一个很好的方法,可以通过Clojure来解决难题。

答案 9 :(得分:1)

newLISP - 嗯...,因为它是现代(以及唯一的??)基于LISP的通用脚本语言? (我不算AutoLISP等,因为它们是特定于域的脚本langs)。因此,如果您将来非常喜欢它,您将通过窗口放弃Python :-))

答案 10 :(得分:0)

我会选择LFE,你学到的速度与你遇到的错误数量成正比。选择LFE会同时为你提供Erlang和Lisp。

答案 11 :(得分:0)

对于视觉/听觉学习者,我非常推荐Righ Hicky关于blip.tv的视频系列。 Clojure for java programmers然后点击REPL。本系列的其余部分自然而然地发挥作用,可以真正获得创造性的果汁。 PCL(Practical Common Lisp)是一本令人兴奋的书,虽然其中一些并不适用于clojure。我强烈推荐关于宏的章节。

答案 12 :(得分:0)

ANSI Common Lisp - OnLisp ANSI Common Lisp