David Nolen <[email protected]> writes:
> The n has to be held onto to complete the computation, so the tail
> call optimization cannot be performed.
That's right.
> ;; can be tail call optimized
> (define (add-tail n)
> (add-iter n 0))
>
> (define (add-iter iter result)
> (if (= iter 0)
> result
> (add-iter (- iter 1) (+ result 1))))
The equivalent Clojure code works with fine without blowing the stack.
These sort of simple tail recursion calls work quite well in Clojure.
(defn add-iter [iter result]
(if (= iter 0)
result
(recur (- iter 1) (+ result 1))))
(defn add-tail [n]
(add-iter n 0))
;; Another way
(defn add-loop [n]
(loop [n n acc 0]
(if (zero? n)
acc
(recur (dec n) (inc acc)))))
I generally use loop where I would use a named let in Scheme.
Cheers,
Chris Dean
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---