LUA > Tail rekurzív függvény > Közlekedési lámpa

Ha valakinek elvonási tünetei lennének, mert mondjuk nem vezethet íme egy béjnácska villanyrendőr implementáció.
Ami elsőre feltűnik, hogy nincs veremtúlcsordulás. Na ez a tailrekurzió áldása.
Itt kipróbálható: http://www.lua.org/cgi-bin/demo

[code]
function feny(...)
print(...)
end

function CsakPiros()

feny("piros")
return PirosEsSarga()
end
function PirosEsSarga()

feny("piros","sarga")
return CsakZold()
end
function CsakZold()

feny("zold")
return CsakSarga()
end
function CsakSarga()

feny("sarga")
return CsakPiros()
end

CsakPiros()
[/code]

Hozzászólások

$ luac lampa.lua 
luac: <expression> expected;
  last token read: `...' at line 2 in file `lampa.lua'
$ luac -v
Lua 4.0  Copyright (C) 1994-2000 TeCGraf, PUC-Rio

szerk.: ah, van másik, de azzal se:

$ luac50 lampa.lua 
luac50: lampa.lua:2: unexpected symbol near `...'
$ luac50 -v
Lua 5.0.3  Copyright (C) 1994-2006 Tecgraf, PUC-Rio

$ lua -v
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio

(Megjegyzés: A luac binárist generál. Ha nincs megadva kimenet, akkor luac.out jön létre, ami a lua-val ugyanúgy végrehajtható.

Csakhogy biztosítsuk a kompatibilitást, erre lehet lecserélni a feny függvényt.


function feny(egy, ketto)
        if ketto ~= nil then egy = egy .. "\t" .. ketto end
        print(egy)
end