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

Reply via email to