ClojureとScalaのパターンマッチング


12

これら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


3
@gnatブログ投稿は本当に偶然のようです。彼はブログ自体の説明についてはあまり気にしていないようで、特定の言語機能が2つの特定の言語間でどのように異なるかを比較するだけです。それは客観的に答えられませんか?
ドーバル14

3
この質問を弁護するために:それは客観的で、よく書かれており、明確です。OPがこの質問を投稿する前にブログを読むことが重要なのはなぜですか?それは質問の質を変えません。

1
これはゴリラ対シャークではありません。彼は、両方の言語で異なって実装されている場合でも、両方の言語に共通する非常に特定の機能に関する非常に具体的な情報を求めているからです。これは、ゴリラ対サメよりもはるかに焦点を絞った質問です。
エヴィカトス14

1
同意した。ゴリラ対シャークは、リンゴとオレンジのような比類のない2つのものを比較することです。2つの言語の機能の実装を比較することは、GorillaとSharkではありません。それは具体的で、関連性があり、専門家が興味を持っている種類の質問です。「言語を選択するのに役立つ」質問ではありません。
カールビーレフェルト14

1
私がブログで言及した理由は、私が質問をするきっかけとなったものについてのあなたの理解を締めくくるためです。実際の質問に対する良い脚注になると思いました。いくつか説明したので、自分で読む必要はありませんが、必要に応じてリンクを含めてください。*と "note:"でそれがかなり明確になったと思いましたが、括弧とダッシュも追加する必要があったと思います。PS:サメ。
黒船14

回答:


21

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

Rich Hickeyがパターンマッチングの代替として言及しているのは、マルチメソッドです。ほとんどの言語では、タイプに基づいて多態的なディスパッチを実行できます。一部の言語では、値に基づいてそれを行うこともできます。Clojureでは、マルチメソッドを使用して、任意の関数に基づいてそれを行うことができます。それは非常に強力な概念です。

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


私の質問に対する非常に興味深い答えをありがとう。そのようにマルチメソッドについて考えたことはありません!単純なタスクには過剰すぎると思われますが、間違いなく強力です。あなたがイディオムについて言ったことにも同意します。私はClojureでそれのこつを得るのを待つことができません:)
kurofune

この答えをありがとう。リンクされたビデオでは、Richが「パターンマッチがうらやましいなら、これはその半分です。ただし、私が気に入らない部分は条件付き部分です。」github.com/matthiasn/talk-transcripts/pull/90/files#
hawkeye
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.