为一个lisp文盲的Clojure

时间:2010-05-28 23:14:29

标签: functional-programming lisp clojure

我是一个终身面向对象的程序员。我的工作主要是java开发,但我有多种语言的经验。 Ruby给了我第一次真正的函数式编程。我喜欢Ruby从功能范例中借用的功能,例如闭包和延续。最终,我毕业于斯卡拉。这是逐步学习以功能性方式处理非平凡问题的好方法。

现在我对Clojure很感兴趣。我知道所有诱人的性感功能(软件事务内存,宏等),但我不能习惯“在lisp中思考”。我见过Rich Hickey针对java程序员的截屏视频,但它们主要用于解释语言功能而不是解决现实问题。

我正在寻找任何建议或资源,使其他人更容易过渡。

8 个答案:

答案 0 :(得分:19)

在我最初提出这个问题之后的11个月。我刚刚开始了一个新项目,以帮助初学者过渡到clojure。它被称为4clojure,它挑战你解决填空式交互问题。

答案 1 :(得分:14)

我对Lisp的第一次介绍是:Peter Norvig的人工智能编程范式。它是对Common Lisp和函数式编程概念的许多功能的非常可读和温和的介绍。

直接从某些Clojure books开始对你来说可能更合适,因为Common Lisp和Clojure之间有几个differences,如果你试图同时学习两者,这可能会让人感到困惑。

同时,尝试 亲身体验Clojure REPL ,做一些练习like Project Euler,然后你可以与其他Clojure对比和命令式Java解决方案。

此外,如果您对Clojure编程和惯用风格有任何疑问,请不要犹豫 与其他Clojurians讨论您的代码 。有几种方法可以做到这一点,例如:Clojure on Google Groups,#clojure IRC channel on Freenode,Twitter通过#03标签{@ 3}},当然还有#clojure

答案 2 :(得分:8)

从OOP直接进入Clojure,我只推荐Stuart Halloway出色的Programming Clojure

我喜欢它,并且在这个过程中它覆盖了很多Clojure以及相当多的功能编程。

Little Schemer和SICP​​很棒,但如果你想学习它们,它们对Clojure来说并不那么重要。

答案 3 :(得分:5)

我建议您获取“欢乐的Clojure”的MEAP版本。我有它,现在MEAP共提供12章。到目前为止,它是迄今为止我读过的关于编程语言的最好的书。这12章很容易让你开始使用Clojure,一直到一些高级主题。当前的MEAP(经常用新章节获取更新)与ociweb Clojure tutorial,stackoverflow.com和freenode上的#clojure IRC频道相结合,我想你会没事的。

虽然我同意Programming Clojure是对Clojure的一个很好的介绍,并且做得非常好,但我们不能否认它每周都会越来越过时。你必须记住,编程Clojure是为Clojure 1.0编写的。现在,我们正在快速接近Clojure 1.2的发布。例如,如果包含defrecord,结构将会过时。

答案 4 :(得分:4)

我非常喜欢youtube上的Brian Twill's series of Clojure videos,这是对一些clojure想法的无痛介绍。他们不会对Lisp或函数式编程语言有任何了解。

就书籍而言,我同意Isaac认为编程Clojure是一个很好的资源。您可能还会考虑一些关于clojure的即将出版的书籍:

The Joy of Clojure

Clojure in Action

如果您现在购买,两者都可以在线提早访问。另外我认为两者都有折扣 - 试试看clojure.org。

彼得和诺曼提到的Lisp书可能是不错的选择(我喜欢SICP,但没有看过其他人)。但是如果你刚刚开始,语法与Clojure的差异可能会有点令人沮丧。出于这个原因,我建议从一开始就使用特定于Clojure的书籍。

(编辑修复链接。)

答案 5 :(得分:3)

对于原始初学者,How to Design Programs会让你像Lisper一样思考。如果你感到不耐烦,那就更快:-)另一本好书是保罗·格雷厄姆的On Lisp,现在可以免费在线免费获奖。

我不关心计算机程序的结构和解释;如果你知道Lisp或Scheme,它已经是一个伟大的知识分子强制游览并且非常令人满意 - 但是我的学生和我还没有发现它是一本值得学习的好书。 The Little Schemer 有很多好的信息,如果你可以养成辩证的组织和可爱的馅饼风格。我不能。

答案 6 :(得分:3)

到目前为止,所有答案都很棒。我想补充一下:

  • Purely Functional Retrogames是关于如何以功能性,无副作用的方式设计旧式视频游戏的优秀系列。如果你仔细阅读并掌握如何在没有副作用的情况下编写吃豆人,那么你将在很大程度上引导解决许多/大多数其他问题所必需的思维模式。
  • Halloway的Programming Clojure是对Clojure的最佳一般性介绍,并提供了如何以功能而非面向对象的方式思考问题的一些想法,特别是蛇游戏示例。
  • Seibel的Practical Common Lisp是一个很好的实用指南,用于在功能上解决实际问题,例如构建数据库。虽然是为CL而不是允许可变数据的Clojure编写的,但这些概念在没有太多修改的情况下仍然存在,并且可以从作者的网站免费在线获取全文。至少值得一看。

答案 7 :(得分:0)

如果您正在寻找“Lispy思考”的介绍,我建议Practical Common Lisp。对于来自非lisp背景的经验丰富的程序员来说,这是一本很好的阅读和恕我直言。

缺点是它针对的是Common Lisp,而不是Clojure;主要原因是Clojure的方法功能更强大。你可能也想要一本特定的Clojure书。