51

Clojureについてどう思いますか?私は次にそれを学ぶことを考えています。現在Erlangを使用していて、レコードの大失敗を除いて一般的に満足しています... ClojureはLISPと同じくらい強力ですか?

4

10 に答える 10

133

それを学ぶことを検討してください。他に理由がなければ、実際のプロジェクトで実際に使用できるからです。

You : Can I use this small Java library called Clojure?
Boss: Why do you need it?
You : For some concurrency improvements.
Boss: Ok.
于 2009-02-18T11:24:00.380 に答える
26

Lisp-1 と Lisp-2 で言及しているのは、関数と変数が同じ名前空間を共有しているかどうかの問題です。Lisp-1 Lisp では、Scheme や Clojure と同様に、そうします。Lisp-2 Lisp では、Common Lisp のように、そうではありません。これは主に好みや利便性の問題であり、プログラミング言語の能力には影響しません。

例として、Clojure では次のことができます。

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

これは、関数と 2 つの値を取り、値に関数を適用する関数です。例えば:

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 +)」の略です。

于 2009-03-20T10:54:01.247 に答える
22

CLではなくClojureを使用している理由は次のとおりです。

  • Javaとの通信が良好なので、コーディングを外部委託できます
  • SwingやWekaなど、あらゆる種類の処理を行う無数のJavaライブラリにアクセスできます。
  • JVM上で実行されるため、問題がどこでも機能するとより安全に想定できます。
  • 同じライブラリがはるかに少ないコードで使用されていることを示すことができれば、Javaプログラマーをラムダ方式に変換できます
  • そして、最も重要なのは、私はEmacsに縛られないことです

:wq

于 2009-10-07T09:20:50.047 に答える
16

Clojure は LISP の方言なので、LISP と同じくらい強力です。

JVM 用の優れた LISP ツールを手に入れたからです。私はこの言語が気に入っています。

于 2009-01-16T19:32:38.887 に答える
14

名前は賢いと思います。

于 2009-01-16T19:30:35.473 に答える
14

「Clojure には、Java が 10 年前にオブジェクト指向プログラミングで行ったことを、並行性指向プログラミングで実現できる可能性があります。言語 (または、Clojure の場合は「言語環境」) を使用して適切に行うことをより簡単にします。プログラマーがすでに慣れ親しんでいるもの」 -- ビル・クレメントソン

皆さん、LISP はプログラミング言語のファミリーで構成されています。Common Lisp や Clojure のような Lisp の方言があります。その上、Common Lisp や Scheme の多くの実装があります。

于 2009-01-16T19:49:57.307 に答える
5

Clojure は Lisp-1 です。歴史的な荷物を一切取り除いた、より優れた Common Lisp と考えてください。また、STM やエージェント (Erlang のアクター モデルを実装しないことに決めた) などの最新の同時実行機能もいくつか備えています。JVM で実行する利点は単純です。すでに非常に多くのライブラリが JVM 用に作成されています (ほとんどが Java で書かれています)。

Clojure in Clojureは、Clojure コンパイラーを Clojure で書き直して、移植性と保守性を高めるための継続的な取り組みです。現在、core.clj を除くほとんどの Clojure は Java で書かれています。この移動後、Parrot を含む多くの VM に移植できるようになります。

于 2009-10-14T14:22:55.893 に答える
5

私は仕事で Erlang を使用して調整されたネットワーク負荷テストを行いましたが、この問題は「分散通信指向ソフトウェアを正しく実行する」という Erlang の「スイート スポット」の範囲内にあったため、完璧でした。複数のスレッドを持つ単一のボックスで複雑なことを行う必要があるコードには、Clojure がはるかに優れていると思います (これはより一般的なシナリオです)。

あなたは Erlang を知っているので時代の先を行っています。これは、Erlang が本当に役立つ問題を見つけるのに役立ちます。Clojures の本当の「スイート スポット」とは何だと思いますか?

于 2009-06-12T18:15:03.707 に答える
3

「Clojure は LISP と同じくらい強力です」とは、ここでスタックオーバーフローのどこかで Common Lisp が Lisp-2 で、Clojure が Lisp-1 であると読んだということですか? (私はここで簡単にとりとめのないかもしれません)...

同時実行性に関する限り、私は Erlang の話が本当に好きです。なぜなら、アクター モデルでアプリを作成することでアプリを簡単に配布できるからです。

Clojure の作成者 ( http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1 ) から

「アクターを使用しても、Clojure にはまだ分散型並行処理の話はありませんが、Erlang のホールセールを採用し、Clojure<->Clojure または Clojure<->Erlang 分散プロセスに Jinterface を使用することを検討しています。完了しました。お楽しみに。」

于 2009-01-16T20:17:42.803 に答える