This works fine as well. More to digest. Thanks. On 19 Aug, 20:06, Benny Tsai <benny.t...@gmail.com> wrote: > This is one way to do it functionally, though it's a bit more verbose. > > "get-nodes" performs a BFS walk of the tree between two nodes, returning the > set of visited nodes: > > (defn get-nodes [from to] > (loop [queue [from] > visited #{}] > (let [[x & xs] queue] > (if-not x > visited > (recur (concat xs (candidates x to)) > (conj visited x)))))) > > With that in hand, "build-tree" can build the adjacency list by simply > calling "candidates" on each node on the walk, ignoring nodes with no > children: > > (defn build-tree [from to] > (into {} (for [n (get-nodes from to)] > (when-let [children (seq (candidates n to))] > [n children])))) > > user=> (build-tree :a :e) > {:a (:b), :c (:e), :b (:c :d), :d (:e)}
-- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en