[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Proper tail recursion
- From: Philippe Lhoste <PhiLho@...>
- Date: Fri, 27 Jul 2001 11:41:20 +0200 (MEST)
> There is another benefit that is very important. If programmers are
> allowed to assume that all lua implementations are properly tail
> recursive, a new style of programming is available which relies on the
> fact that implementations have this property. For example, to
> implement a program that behaves much like a finite state machine, one
> can write a function for each state. A transition in implemented by
> tail call to the next state. The tail recursiveness of the
> implementation ensures that only stack frames needed to produce the
> correct answer are retained, so the stack size does not limit the size
> of the finite state machine.
While I am not overly interested by recursive algorithms (useful, but
avoidable most of the time. Please, no thread on this, I know I am probably
wrong... :-), the finite state machine argument is quite valid. I don't know how to
jump from one part of code to another, in Lua (no goto). Perhaps with dofile,
but it is quite clumsy.
> In the following example, the computation specified in loop.lua is
> fundamentally iterative.
>
> #! /usr/bin/env lua
> function loop(a)
> if abs(a) < 1 then
> return a
> else
> return loop(a * 0.9)
> end
> end
As Roberto and Luiz stated, there are some problems with a generic tail
recursions, for performance, and because of the dynamic nature of functions.
Now, perhaps we can imagine a special syntax for such use, flagging a
function or a call as needing tail recursion.
Something like:
!function loop(a)
if abs(a) < 1 then
return a
else
return loop(a * 0.9)
end
end
or
function loop(a)
[...]
return !loop(a * 0.9)
end
end
This indicates that the call of this function, or this call, must not be
stacked. Of course, the ! syntax is just indicative, I choosed not to use a new
keyword.
Of course, this can provide some other problems, or strange bugs if the user
misuse this syntax...
I hope I am clear and not off target, I am not as aware of these problems as
you "computer science" guys :-)
Regards.
--
--._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.--
Philippe Lhoste (Paris -- France)
Professional programmer and amateur artist
http://jove.prohosting.com/~philho/
--´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`·._.·´¯`--
Sent through GMX FreeMail - http://www.gmx.net