Thanks for the response and suggestions Justin. A co-worker also just suggested multiple arg lists which is perfect. He also suggested (or foo bar) to further simplify my code. It definitely cleans the code up and improves readability.
- John On Mon, Aug 2, 2010 at 5:37 PM, Justin Kramer <jkkra...@gmail.com> wrote: > I think you want: > > (defn- do-traversal [tree idx & [tree-traversal]] > ...) > > Note the extra brackets for destructuring. > > Another alternative is using multiple arg lists: > > (defn- do-traversal > ([tree idx] > (do-traversal tree idx [])) > ([tree idx traversal] > ...)) > > Lastly, FYI, the form (if foo foo bar) can be simplified to (or foo > bar). > > Hope that helps, > > Justin > > On Aug 2, 5:04 pm, John Sanda <john.sa...@gmail.com> wrote: > > I've just implemented an inorder traversal function for a vector-based > tree. > > The functions look like, > > > > (defn- do-traversal [tree idx traversal] > > (cond > > (not (node-exists? tree idx)) traversal > > (leaf? tree idx) (conj traversal (tree idx)) > > :else (apply conj > > (do-traversal tree (left-child idx) traversal) > > (tree idx) > > (do-traversal tree (right-child idx) traversal)))) > > > > (inorder-traversal [tree] > > (do-traversal tree root-idx [])) > > > > This works as expected but now I am looking to refactor the code some. I > > wanted to see if I could do away passing an empty vector to the > do-traversal > > function. So I updated do-traversal to look like, > > > > (defn- do-traversal [tree idx & tree-traversal] > > (let [traversal (if tree-traversal tree-traversal [])] > > (cond > > (not (node-exists? tree idx)) traversal > > (leaf? tree idx) (conj traversal (tree idx)) > > :else (apply conj > > (do-traversal tree (left-child idx) traversal) > > (tree idx) > > (do-traversal tree (right-child idx) traversal))))) > > > > When the expected traversal for a tree is [10 20 30] I instead get ([] 30 > 20 > > 10 [])) in my unit test. Can someone explain to me why using let as I > have > > done does not work, and what another solution might be? > > > > Thanks > > > > - John > > -- > 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<clojure%2bunsubscr...@googlegroups.com> > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- - John -- 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