你对Clojure有什么看法?

时间:2009-01-16 19:25:46

标签: lisp clojure

你们对Clojure有什么看法?我正在考虑接下来学习它,目前正在使用Erlang并且除了记录惨败之外总体上对它很满意...... Clojure和LISP一样强大吗?

10 个答案:

答案 0 :(得分:134)

考虑学习它。如果没有其他原因,那么因为你可以在一个真实的项目中实际使用它。

You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.

答案 1 :(得分:27)

Lisp-1 vs Lisp-2所引用的是函数和变量是否共享相同名称空间的问题。在Lisp-1 Lisps中,就像Scheme和Clojure一样。在Lisp-2 Lisps中,就像Common Lisp一样,它们没有。这主要是品味和/或方便的问题 - 它不会影响编程语言的力量。

例如,在Clojure中你可以这样做:

(defn my-apply [func arg1 arg2]
  (func arg1 arg2))

这是一个函数,它接受一个函数和两个值,并将函数应用于值。例如:

user=> (my-apply + 1 2)
3

在Common Lisp中,您必须将其写为

(defun my-apply (func arg1 arg2)
  (funcall func arg1 arg2))

你需要“funcall”的原因是,因为“func”在变量的名称空间中,所以你不能直接将它用作函数,就像你在Clojure中那样,它没有做出这种区分。因此,您必须告诉Common Lisp“请将此变量解释为函数并使用这些参数调用它”。这样做的另一个结果是,要获得相同的结果,您必须像这样调用“my-apply”:

=> (my-apply #'+ 1 2)
3

这里的问题是相反的:“+”是一个函数,但你想把它作为变量传递,所以你必须“转换”它。 “#'+”是“(function +)”,btw。

的缩写

答案 2 :(得分:22)

我使用Clojure而不是CL,因为:

  • 它与Java沟通得很好,所以我可以外包我的编码
  • 它可以访问各种各样的java库,包括Swing和Weka
  • 由于它在JVM上运行,因此您可以更安全地假设您的问题无处不在
  • 如果您可以使用更少的代码显示相同的库,则可以将Java程序员转换为lambda方式
  • 而且,最重要的是,我没有与Emacs绑在一起

:WQ

答案 3 :(得分:17)

Clojure是LISP的一种方言,所以,是的,它和LISP一样强大。

除了我们现在为JVM提供一个好的LISP工具之外别无其他原因我喜欢这种语言。

答案 4 :(得分:15)

我认为这个名字很聪明。

答案 5 :(得分:15)

“Clojure有可能为面向并发的编程做十九年前Java为面向对象编程所做的事情:使用一种语言(或者在Clojure的情况下,一种”语言环境“)更简单地做到这一点类似于程序员已经习惯的。“ - Bill Clementson

人们,LISP由一系列编程语言组成。有Lisp方言,如Common Lisp和Clojure。最重要的是,Common Lisp或Scheme有很多实现。

答案 6 :(得分:5)

我在工作中使用Erlang进行协调网络负载测试,并且它非常适合,因为问题完全在Erlang的“正确执行分布式通信软件”的“甜蜜点”内。我发现Clojure对于需要在具有多个线程的单个框上执行复杂操作的代码更好(这是更常见的情况)。

  你已经领先于曲线,因为你知道Erlang,这将帮助你发现它真正闪耀的问题。 Clojures真正的“甜蜜点”是什么?

答案 7 :(得分:5)

Clojure是一个Lisp-1,是的。可以把它想象成一个没有历史包袱的更好的Common Lisp。它还有几个现代并发功能,如STM和Agents(他们决定不实现Erlang的Actors模型)。在JVM上运行的优点很简单 - 已经为它编写了许多库(主要是Java)。

Clojure in Clojure是在Clojure中重写Clojure编译器的持续努力,使其更具可移植性和可维护性。除了core.clj之外,Clojure的大部分内容都是用Java编写的。在此移动之后,可以将其移植到很多虚拟机,包括Parrot。

答案 8 :(得分:3)

我的意思是“Clojure和LISP一样强大”是我在stackoverflow上读到的地方,Common Lisp是lisp-2而Clojure是lisp-1? (我可以轻松地在这里漫步)......

就兼容性而言我非常喜欢Erlang的故事,因为它很容易通过在Actor模型中编写来分发应用程序

来自http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1

的Clojure创作者的

“即使有演员,Clojure也不会有分布式并发 故事,但我正在考虑采用Erlang的批发,使用 用于Clojure< - > Clojure或甚至Clojure< - > Erlang的Jinterface 流程。也许这会在完成后看起来像白蚁。留 调整。 “

答案 9 :(得分:3)

我比Clojure更喜欢Common Lisp,因为语法更规则,并且它与可怕的(IMHO)Java API无关。

对于Common Lisp,我也可以选择几个优秀且经过良好测试的实现和一个可靠的成熟标准。

但如果我不得不使用Java来完成一项工作,那么我肯定会考虑使用Clojure。 :)