ランクに基づいて要素を取得する clojure で順序付きセットを実装しています。これは、4 番目の要素 (セットの順序に従って)、3 番目、または 7 番目の要素をすべて対数時間で取得できることを意味します。
conj
、get
、などの clojure の一般的なメソッド (または「抽象化」) と統合された新しいデータ構造を取得するには、次の方法nth
が適しています。
conj
たとえば、私のデータ型のプロトコルで実際に実装するか、- Rich Hickey
clojure.lang.IPersistentSet
またはそれに似たインターフェースを実装します。
最初の方法は簡単に思えますが、関数のセマンティクスを台無しにするのも簡単です。2 つ目は、パブリック API の一部になることを意図していないインターフェイスを実装しているように見えます。そのインターフェイス (プロトコル) に関連付けられている実際のメソッドは、紛らわしいほど異なります。たとえば、conj
私のセットで実装するには、別の名前の のcons
メソッドを実装する必要があるようです。clojure.lang.IPersistentSet
これがどのように機能するかについてのドキュメントはほとんどないようで、このランク付けされたセットを実装する上で大きな課題となっています。
どちらを選ぶべきですか?clojure.lang
独自のメソッドまたはインターフェイスのメソッドを実装する必要がありますか? 後者を行う必要がある場合、プロセスをガイドできる優れたドキュメントはどこにありますか?
編集:要素のランクを指定することにより、対数時間で任意の要素を取得(または「削除」)できるセットを作成しようとしていることを明確にしたいと思います(たとえば、「5番目の要素をください、mr.設定。")。私の知る限り、そのようなセットは clojure にはまだ存在しません。