Когда в Clojure деревья гетерогенных типов узлов должны быть представлены с использованием записей или векторов?

Какой идиоматический метод закрытия лучше всего подходит для представления дерева, состоящего из узлов разных типов:

A. построение деревьев из нескольких различных типов записей, которые можно определить с помощью deftype или defrecord:

(defrecord node_a [left right])
(defrecord node_b [left right])
(defrecord leaf [])

(def my-tree (node_a. (node_b. (leaf.) (leaf.)) (leaf.)))

B. построение деревьев из векторов с ключевыми словами, обозначающими типы:

(def my-tree [:node-a [:node-b :leaf :leaf] :leaf])

Большая часть кода clojure, который я вижу, похоже, поддерживает использование структур данных общего назначения (векторы, карты и т. д.), а не типов данных или записей. Возьмем один пример, Hiccup очень хорошо представляет html, используя подход вектор + ключевое слово.

Когда мы должны предпочесть один стиль другому?

6
задан Rob Lachlan 4 November 2010 в 21:32
поделиться