[Haskell-cafe] Optmiization of recursion
John Goerzen
jgoerzen at complete.org
Tue Sep 28 14:10:11 EDT 2004
Hello,
As I'm investigating Haskell, it's occured to me that most of the
Haskell tutorials out there have omitted something that was quite
prominent in the OCaml material I had read: making functions properly
tail-recursive.
The OCaml compiler was able to optimize tail-recursive functions such
that they could be compiled using a loop. This would achieve two main
benefits: performance due to not needing to allocate/deallocate stack
frames, and the ability to work on very large lists since each recursive
call did not consume extra stack space.
So I have several questions about Haskell:
1. Do Haskell interpreters/compilers perform similar optimizations?
2. If the answer to 1 is No, then am I correct in saying that my ability
to handle very large lists in recursive functions is limited by the
maximum stack size on my system?
3. Does it make a difference for optimization purposes whether a
particular recursive function is tail-recursive?
4. Is a reference available documenting which Prelude/standard functions
are properly tail-recursive (and thus suitable for very large lists) and
which are not? (OCaml system docs generally specify when a function is
not tail-recursive... for instance, one of foldr/foldl is and the other
isn't.)
5. Are there any examples/patterns anywhere that illustrate standard
tail-recursion practice in Haskell?
Thanks!
More information about the Haskell-Cafe
mailing list