web-dev-qa-db-ja.com

Clojureでのパターンマッチングvs Scala

これら2つの言語のパターンマッチングの主な違いは何ですか?構文ではなく、機能、実装の詳細、使用例の範囲、および必要性について言及しています。

Scalaアプリケーション(例:Lift and Play)は、言語パターンマッチング能力を誇らしげに語っています。一方、Clojureにはライブラリ、core.match、および組み込みの構造化があり、これも強力なようです。

*注:私がこの質問をするように促された理由は、プログラマーが実験としてScalaとClojureの両方を使用してLISPインタープリターを作成したというブログ投稿があったためです。彼は言ったClojureの一致が一定の時間の後に壊れたが、理由は説明できなかったが、私は本当に知りたいと思っている。この投稿はここにあります。 http://www.janvsmachine.net/2013/09/writing -simple-LISP-interpreter-in-clojure.html

12
kurofune

このビデオ で最近見たところ、Rich HickeyはScalaなどの言語の構造化部分は好きだが、パターンマッチング部分はあまり好きではないとコメントし、それに応じてClojureを設計しました。これはおそらく、パターンマッチングがライブラリにあり、それほど堅牢ではない理由を説明していますが、あなたが言及した投稿で見られた種類の問題は明らかにバグです。

Rich Hickeyがパターンマッチングの代わりとして言及しているのは multimethods です。ほとんどの言語では、タイプに基づいてポリモーフィックディスパッチを実行できます。一部の言語では、値に基づいてそれを行うこともできます。 Clojureでは、マルチメソッドを使用して、任意の関数に基づいて実行できます。それはかなり強力なコンセプトです。

言語を使用するプログラマは、その言語独自の最良のイディオムを使用するべきであるという原則に帰着します。 ClojureでScalaのようなコードを記述しようとすると、困難が生じ、逆もまた同様です。

21
Karl Bielefeldt