Który jest lepszy idiomatyczne praktyka clojure do reprezentowania drzewo składa się z różnych typów węzłów:W Clojure, kiedy drzewa heterogenicznych typów węzłów powinny być reprezentowane za pomocą rekordów lub wektorów?
A. budowlanych drzew z kilku różnych typów rekordów, które definiuje się za pomocą deftype lub defrecord:
(defrecord node_a [left right])
(defrecord node_b [left right])
(defrecord leaf [])
(def my-tree (node_a. (node_b. (leaf.) (leaf.)) (leaf.)))
B. budowlanych drzewa z wektorami, ze słowami kluczowymi wyznaczania tych typów:
(def my-tree [:node-a [:node-b :leaf :leaf] :leaf])
Większość kodu clojure że widzę wydaje się sprzyjać wykorzystanie struktur danych ogólnego zastosowania (wektory, mapy, itp), R niż dane lub rekordy. Czkawka, aby wziąć jeden przykład, przedstawia html bardzo ładnie za pomocą wektora + słowa kluczowego.
Kiedy powinniśmy preferować jeden styl w stosunku do drugiego?
Mam nadzieję, że to pytanie nie jest zbyt ogólne. Tak sformułowałem to, ponieważ tego rodzaju decyzja, wykorzystanie rekordów lub ogólnych struktur danych wydaje się dość często, a odpowiedź często nie jest oczywista. Przynajmniej dla mnie. –
W dużej mierze zależy to od tego, czego oczekujesz od węzłów. Dla tego, co jest warte, może być użyteczne posiadanie węzłów, które mogą pracować z biblioteką zip 'clojure.zip'. –