2

私は sml (1 か月) と clojure (1 週間) の両方が初めてです。数週間前に sml でデータ型とパターン マッチングを学びましたが、clojure に似たようなものがあるかどうか知りたいです。そこにはいくつかのパターンマッチングライブラリがあるようです。彼らは ML のパターン マッチングの全機能を備えていますか? データ型はどうですか?独自のデータ型を作成するには、deftype などを使用する必要がありますか? もしそうなら、どうすればいいですか?deftype はかなり複雑に見えます。

人々がLispの世界でデータ型を使用しない場合、clojureでデータ型とパターンマッチングを行う慣用的な方法は何ですか?

4

1 に答える 1

2

Clojure の世界では、使用できるポリモーフィズムの「アラカルト」オプションがいくつかあります。

  • さまざまなデータ型で多態的に機能する、効率的にディスパッチされる関数を定義する場合は、通常、プロトコルを使用します。deftype異なるデータ型は、またはで定義された Java クラスまたは Clojure 型を意味する場合がありdefrecordます。
  • core.matchは非常に優れた汎用パターン マッチング ライブラリです。
  • マルチメソッドは、汎用のポリモーフィック ディスパッチを提供します。これは、パラメータの任意の関数でディスパッチ/マッチできます。プロトコルより少し遅いですが、非常に柔軟です。

独自のデータ型を定義する場合:

  • 純粋なデータ (通常のマップ、リスト、ベクトルに格納されている) を使用することを過小評価しないでください。ほとんどの場合、これは Clojure で最も簡単で柔軟なアプローチです。
  • それだけでは不十分だと判断した場合は、ほとんどの場合ではdefrecordなく、deftypedefrecord を使用してハッシュマップのように動作するものを作成することをお勧めします。そのため、非常に柔軟でユーザー フレンドリーです。deftype は、ライブラリやコンパイラなどを作成する人々にとっては、より低レベルの構造です。
于 2013-02-08T07:48:41.473 に答える