学习其他方言的 Lisp 是否有助于学习 Clojure?

4
我一直在阅读《计算机程序的构造和解释》。Lisp教会了我以它的方式思考。作为一个Java开发者,我希望学习Clojure。
我知道Clojure与Lisp相似。所以我的问题是,学习Lisp是否有助于我更容易地学习Clojure?这两种语言中是否有类似的概念?

2
请查看这个 Stack Overflow 的问题:https://dev59.com/-2XWa4cB1Zd3GeqPNoJo - Kyle
4个回答

6
Clojure与其他Lisp语言有很多相似之处。《计算机程序的构造和解释》是一本很好的书,虽然它侧重于Scheme,但它所教授的大部分内容对Clojure也是直接相关的。
如果你学会了一种Lisp语言,那么学习另一种将会更容易。
然而,Clojure有几个“不同”的特点值得注意:
  • 它使用向量[]、哈希表{}和集合#{}扩展了经典的Lisp语法,以及传统的列表()
  • 它比大多数其他Lisp语言更注重函数式编程风格 - 几乎所有东西都是不可变的,默认情况下序列是惰性加载的等。在某些方面,Clojure感觉非常受Haskell的影响。
  • Clojure极大地拥抱Java平台 - 它运行在JVM上,你可以轻松地直接使用Java库。因此,虽然你不一定需要了解Java才能在Clojure中有效地工作,但了解Java生态系统和工具会有所帮助。
  • Clojure的STM系统/并发支持非常创新和不同寻常。值得观看这个视频:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

5
请参考以下翻译:

请以谨慎的态度看待这篇文章。我是一位熟练使用 Common Lisp 和 Scheme 的程序员,最近才开始学习 Clojure,所以并不是专家。您可能需要在 Google 中搜索其他人的经验。

从表面上看,Clojure 和 CL/Scheme 之间的区别主要在于微小的细节。总体原则基本相同,假设您已经了解了其中一个 Lisp,那么学习 Clojure 不会显著改变您对编程的思考方式。与 Scheme 相比,Clojure 更加强调不可变性和函数式编程,有一些函数的名称不同,并且需要平衡圆括号/方括号/花括号而不仅仅是圆括号,但这几乎是语言层面的全部差异。

我发现,在学习 Clojure 方面,如果您已经掌握 CL/Scheme,会更加容易入门。

最后,即使您计划永远不再接触 Scheme,通过学习 SICP 和 配套讲座,也值得花费时间。它教授了许多通用的计算机科学原理,以及一种特定的思维方式,这将有助于您作为开发人员使用任何语言。


3

每种语言都有自己独特的细微差别。如果你正在学习Lisp的小窍门(假设是Common Lisp / CL),但是选择另一种语言,更不用说第二个Lisp方言了,你也会学习到这些怪癖/差异/细微差别。

除非你有大量时间去学习,否则我建议如果你对编程感兴趣,就学习Clojure,如果你对Lisp编程感兴趣,就学习Lisp。

学习Lisp并不是坏事,因为你会习惯于学习Lisp方言与Algol-C基础语言之间的区别。同样的论点也可以用来学习Scheme。

在Clojure出现之前,我使用类似的语言进行编程,但即使是Bliss-32和PL/I IMHO也更类似于C和Java而不是Lisp方言。学习Clojure需要我进行更大的思维调整,甚至比从C转向C++(在90年代)还要困难。

我喜欢这种思维调整,但它是逐渐的,需要一个学习曲线。


2

我曾走过同样的路,因为我的一位朋友是一位老Lisper, 他让我出于兴趣学习了Lisp。他早在70年代就开始编程,并曾为一些Lisp公司工作。每当我们谈论编程语言时,他都会提到Lisp中的概念,而我感觉我从未真正理解他的意思。

对我来说,学习Lisp是进入Clojure的好开始,最终我选择Clojure是因为我在寻找一种能够运行在ARM CPU上的Lisp。在我看来,Lisp不太复杂,因为它没有与Java虚拟机集成,如果不熟悉Java,理解Clojure比Lisp要困难得多。我只能说,在学习Clojure时,良好的Lisp基础知识确实对我有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接