Schemeでは、define-struct
を使用してバイナリ検索ツリーを作ることができますが、Clojureではどうしますか?Clojureでどのようにバイナリ検索ツリーを作成しますか?
答えて
structmapsを使用できます。 1を定義するには:
(defstruct bintree :left :right :key)
インスタンスを作成するには:
(struct-map bintree :left nil :right nil :key 0)
あなたは、このような構造体の値にアクセスすることができます
(:left tree)
など
それとも、新しいアクセサ関数を作成できます:
(def left-branch (accessor bintree :left))
し、それを使用します。
(left-branch tree)
Clojureは分かりませんが、私はSchemeでこれをやっているのと同じ方法だと思います。define-struct
...左右の枝を一緒に共謀させないでください。何かを見つけるには、原子を打つまで繰り返す。
真剣には、あなたが望むようにstructmapsが鳴ります。私はthis pageを見つけました。半分ほど下にあるstructmapsを探してください。
あなただけのキーを比較するためにさまざまな機能が必要な場合は、すべてのソートマップが本当に木である(言語ですでに定義されている木を使用することです最も簡単な方法は、 sorted-map-byを使用してください)。
;;define function for comparing keys
(defn compare-key-fn [key1 key2] (< key1 key2))
;;define tree and add elements
(def my-tree
(-> ;;syntax sugar
(sorted-map-by compare-key-fn) ;;this returns empty tree with given function to compare keys
(assoc 100 "data for key = 100") ;;below we add elements to tree
(assoc 2 "data for key = 2")
(assoc 10 "data for key = 10")
(assoc -2 "data for key = -1")))
;;accesing elements by key
(prn "element for key 100 =" (my-tree 100))
;;"erasing" elements from tree - in reality, what we are really doing, is returning a new tree that contains all elements of the old one, except the element we've just erased.
(def my-new-tree
(dissoc my-tree 2))
(prn my-new-tree) ;; to verify, that element 2 is "erased"
ソートされていませんか?私はそれがよりフィットすると思うし、キーはあなたが保管する構造体の一部である可能性があります。 sorted-mapは、キーを切り離し、永久に別々に扱うよう強制します。 –
+1とにかく、私が言っていたことに近いですが、質問されたときに私はその質問を見たことがあります。 –
- 1. 作成バイナリ検索ツリー
- 2. ラケットでバイナリ検索ツリーを作成しますか?
- 3. Recursivleyバイナリ検索ツリーが完成したかどうかのテスト
- 4. バイナリ検索ツリーの検索操作
- 5. ツリーはバイナリ検索ツリーですか?
- 6. バイナリ検索ツリー
- 7. バイナリ検索ツリー
- 8. バイナリ検索ツリー
- 9. バイナリ検索ツリー
- 10. clojureでバイナリ検索ツリーを実装する
- 11. Clojureでのツリー検索core.logic
- 12. バイナリ検索ツリーで親を検索しますか?
- 13. 文字列からバイナリ検索ツリーを作成するには?
- 14. より複雑なバイナリ検索ツリーを作成する
- 15. バイナリ検索ツリーのトラバースはどのように変更できますか?
- 16. バイナリツリー、バイナリ検索ツリー、バイナリ検索
- 17. deleteバイナリ検索ツリー
- 18. バイナリ検索ツリー?アルゴリズム
- 19. バイナリ検索ツリー式
- 20. Cバイナリ検索ツリー
- 21. バイナリ検索ツリーC++
- 22. バイナリ検索ツリー - ポストオーダーロジック
- 23. バイナリ検索ツリーのセグメンテーションフォールト
- 24. バイナリ検索ツリーの再帰
- 25. バイナリ検索ツリーの質問
- 26. C.のバイナリ検索ツリー
- 27. バイナリ検索ツリーのリスト
- 28. バイナリ検索ツリーのトラバーサル
- 29. バイナリ検索ツリーの高さ
- 30. Cのバイナリ検索ツリー、セグメンテーションフォールトエラー
これはネストされたリストまたはベクターを使用するよりもどのように優れていますか? – Zaz
鍵は名前がつけられており、一定時間のアクセスが保証されています(リストは線形アクセスですが、ベクトルは一定です)。これは2009年に書かれたものですが、それ以来多くの変更がありました。私はスキームの 'define-structure'についての質問だったので、' defstruct'だけを推奨していました。 –