On Feb 24, 11:35 pm, David Sletten <da...@bosatsu.net> wrote:
> On Feb 24, 2009, at 6:07 PM, David Sletten wrote:
>
>
>
> > (defn kill-nil
> >    ([l] (kill-nil l '()))
> >    ([l result] (cond (nil? l) (reverse result)
> >                      (nil? (first l)) (recur (rest l) result)
> >                      true (recur (rest l) (cons (first l) result)))) )
>
> I forgot to ask...
>
> In Lisp, rather than repeatedly testing for an optional argument like  
> this:
> (defun kill-nil (l &optional (result '()))
>    (cond ((endp l) (nreverse result))
>          ((null (first l)) (kill-nil (rest l) result))
>          (t (kill-nil (rest l) (cons (first l) result)))) )
>
> I would preserve the interface to the user (i.e., single arg) but  
> eliminate the decisions regarding the optional arg from the recursive  
> calls:
> (defun kill-nil (l)
>    (labels ((kill-nil-aux (l result)
>               (cond ((endp l) (nreverse result))
>                     ((null (first l)) (kill-nil-aux (rest l) result))
>                     (t (kill-nil-aux (rest l) (cons (first l)  
> result)))) ))
>      (kill-nil-aux l '())))
>
> In the Clojure version above there doesn't seem to be any penalty  
> since the "recur" only occurs after the correct arity has been selected.
>
> Is this correct? How about a more traditional recursion?
> (defn kill-nil
>    ([l] (kill-nil l '()))
>    ([l result] (cond (nil? l) (reverse result)
>                      (nil? (first l)) (recur (rest l) result)
>                      true (kill-nil (rest l) (cons (first l)  
> result)))) )
>
> Is there a penalty deciding which arity to use on each call?

It depends if I'm on your lawn.

>
> Aloha,
> David Sletten
--~--~---------~--~----~------------~-------~--~----~
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
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