Clojure的优点是什么?[关闭]


40

我最近一直在研究Clojure,偶然发现了Stackoverflow上的这篇帖子该帖子指出了一些遵循最佳实践的项目以及总体上不错的Clojure代码。在阅读了一些基本教程之后,我想对这种语言有所了解,因此我看了一些“实际”项目。

看完ClojureScriptCompojure(前面提到的两个“好的”项目)后,我觉得Clojure是个玩笑。我不明白为什么有人会选择Clojure,例如Ruby或Python,这是我喜欢的两种语言,它们的语法很简洁,很容易上手,而Clojure 到处都使用了太多的括号和符号,从而破坏了其可读性。我。

我认为Ruby和Python美观,可读且优雅。即使对于完全不了解该语言的人,它们也很容易阅读。但是,Clojure对我来说并不透明,我觉得我必须了解有关语言实现的每一个细微细节,以便能够理解任何代码。

所以,请赐教!

  • Clojure有什么好处?
  • 为了欣赏它,我应该了解的最低语言是多少?

14
I don't understand why someone would pick Clojure over say, Ruby or Python-它在jvm上运行,并且可以使用整个java库。 ... have such a clean syntax可以说,像函数语言一样的lisp具有非常干净的语法和结构,只是大多数人不习惯的语法和结构。

22
它的名字很性感。
程序员

4
任何居住在地下室的青少年都可以在短短几个月内找到Python和Ruby。如果这是他们想要使用的全部,那么他们将永远不会离开地下室。我并不是说与编写嵌入式C的人相比,从事多年Python专业开发的人的死亡率要低一些,但是如果Python和Ruby是他们所知道的以及他们想知道的所有东西,那么就会有些麻烦。顺便说一句,我在毕业后花了6年的时间亲自发现并欣赏了函数式编程和Lisps。我对Scheme的第一个反应是下意识的。
Job

4
“可以说,像函数语言一样的lisp具有非常干净的语法和结构,只是大多数人不习惯使用它。”:我对Lisp的经验很少,我刚开始阅读“ Practical Common Lisp”这本书。到目前为止,语法还没有遇到任何问题。恕我直言,关于类似Lisp的语法不易读的神话只是FUD。
Giorgio

4
我最近开始研究Clojure(但是我已经有Haskell和Scala的经验,因此语法并不令人震惊)。我实际上发现它令人惊讶地可读。few与许多语言相比,括号内的符号非常多,几乎没有保留字。您发现它不可读的原因是因为它是一种全新的范例,并且以与典型的面向对象语言不同的方式工作。给它一些时间和力量。
KChaloux 2012年

Answers:


47

对于我给的背景,我可以这样解释:

  1. 您熟悉Ruby / Python。
  2. 您还没有看到Clojure的优势。
  3. 您找不到Lisp或Clojure语法清晰。

...我认为最好的答案是阅读Emerick,Carper和Grand 的《Clojure编程》一书。本书对Python,Ruby和Java进行了许多显式的代码比较,并提供了针对这些语言的编码器的文字说明。我个人是在使用Python构建大型项目并具有一定的Lisp经验之后来到Clojure的。读那本书有助于说服我不仅在附带项目中而且为了专业目的开始使用Clojure。

要直接解决您的两个问题:

  1. Clojure有什么好处?本网站和其他地方的答案很多,例如,请参见https://www.quora.com/Why-would-someone-learn-Clojure
  2. 为了欣赏它,我应该了解的最低语言是多少?我建议您了解Clojure设计背后的重要思想,如Clojure编程Clojore 的喜悦之书所述,以及Rich Hickey的演讲,尤其是其中的阐述。谈话简单容易。一旦你知道什么/为什么你就可以开始了解如何阅读Clojure的代码时,ESP。如何将您的思维方式从类,对象,状态/变异更改为“公正的函数和数据”(高阶函数,映射/集合/序列,类型)。

附加建议:Lisp的优雅和强大部分是由于其极简和完全一致的语法。有了一个好的编辑器,例如带有clojure-mode和ParEdit的Emacs,就更容易理解它了。随着对它的熟悉,语法逐渐消失,您将“看到”语义,意图和简洁的抽象。其次,不要从阅读ClojureScript或Compojure的源代码开始,它们一次太多了。尝试一些4clojure.org问题,并将解决方案与那里的顶级编码人员进行比较。如果您看到其他4-6种解决方案,那么肯定有人会写出一种真正惯用的,简洁的FP风格的解决方案,您可以将其与笨拙,冗长且不必要的复杂命令式解决方案进行比较。


20

Lisp方言由于其简单的语法而具有独特的优势。这种简单的语法使使用宏的元编程非常简单。这使您可以对语言进行建模以使其适合您的问题领域,而不必进行建模以使问题域适合您的语言。一旦掌握了它,它真的很酷,而且它使您可以轻松地完成许多其他语言中很难做到的事情。

缺点是,由于每个Lisp程序本质上都定义了自己的语言,因此您确实需要对事物有扎实的了解才能了解正在发生的事情。

现在,回答您的问题...

  1. Clojure是在JVM / CLR中运行的现代Lisp方言。这使得在现有基础架构中利用Lisp的功能变得容易。

  2. 必须了解如何使用宏将Lisp构建到您的问题域,以了解其用法。我真的只有在实现Lisp运行时之后才了解这一点,当时我发现许多核心语言功能都可以在Lisp本身中轻松实现。要达到这个目的,需要一个相当大小的项目。

除了它的优点之外,尽管编程很有趣,但我个人没有很多情况下会遇到日常问题。这是学习扩展思维的一个非常好的工具,并且在正确学习了Lisp之后,利用其他语言的元编程功能变得更加自然。

简单的语法使计算机易于解释(允许使用如此简单而强大的宏),但对于人类而言,很难快速解析复杂的表达式。


2
你看光桌了吗?

4
您的答案听起来像是宏是进行Lisp编程的常规方法,而实际上大多数编程问题都可以通过普通的一流函数来解决。宏主要用于语言编程(即扩展语言)。另请参阅bookshelf.jp/texi/onlisp/onlisp_9.html
罗伯特·哈维

3
@RobertHarvey我会争辩说,如果您不利用marcos,那么我将使用大量其他语言来提供一流的功能以及更易读的语法。
bunglestink

@MichaelT看起来很整洁。我喜欢这个概念。
DPM

3
就具有一流功能的语言而言,@ RobertHarvey Scala,JavaScript,C#,Python和Haskell都在我的头上,我认为它们比Lisps更具有人类可理解的语法。
bunglestink 2012年

10

Clojure的优势已经被多次强调,而且可以肯定的是,它构成了一种非常强大的语言,因此在这里我不再赘述。

自从大学时代起,我就一直喜欢lisp。当我发现Clojure时,我感到非常兴奋(也许终于有机会在学术界之外使用lisp!)。但是,当我开始学习时,一种不安的感觉开始蔓延,尽管我无法确切指出我不喜欢的是什么。首先,我想说Common Lisp编码对我来说既简单又有趣,但是Clojure的学习曲线更为陡峭。Clisp具有一定的美丽和优雅。我不确定我会从Clojure获得相同的感觉。我想知道随着我获得更多的经验,这种感觉是否会消失。

对于我神秘的轻微排斥,我还有另一个猜测。我认为这可能是其极大的灵活性。例如,您可以具有半个矢量和半个映射的结构,并使用一些代码字符可以将其接受为参数,将其拆开并正确处理。是的,它删除了所有的样板,但是感觉不对。就像您永远不太了解所有括号,冒号,半身人等等的规则一样。

对我来说,我仍然喜欢这种语言的所有优点(主要是在JVM中运行并简化并发性,同时比Java更强大,更简洁,设计缺陷更少),但对于是否是否存在某些问题尚无定论本来可以改善的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.