Clojure does tail-call elimination for simple cases with loop/recur. This is 
by far the most common case. Most other tail-recursive situations can be 
represented as lazy sequences, which are another way to handle recursive 
functions without consuming stack space. For the final rare cases (e.g. 
mutually recursive functions) Clojure has `trampoline`, which does something 
similar to (on first glance) Erjang.

One nice thing about Clojure's approach is that any function can be invoked 
from Java just like any other method. On a quick read, I can't tell if  the 
Erjang approach requires special handling from Java code.

The underlying goal of Clojure's recursion semantics is to always be 
explicit about where compilation strategies will differ. Loop/recur, lazy 
seqs, and trampoline all have different performance characteristics. You 
don't have to guess which method is being used.

-Stuart Sierra
clojure.com

-- 
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