• Subject: Re: evolutionary programming & Lua
• From: Dave Bollinger <DBollinger@...>
• Date: Mon, 23 Aug 1999 22:57:01 -0400

```Steve Dekorte wrote:
>> So make a function that turns:
>> into:
>> myFunc = dostring("return function () return args.1 + ( args.2 * args.3
)")

Can I play?  Forgive me for intruding into the conversation, but this is
a neat puzzler that I'd love to see the "right" way to solve.  I came up
with the following, which is almost certainly NOT the "right" way ;-) but
gets the job done:

function eval(t)
if type(t)=="table" then
return "("..t[1](t[2],t[3])..")"
else
return argcat(t)
end
end

function argcat(t)
local arg = "p"..tostring(t)
local sep = ((args=="") and "") or ","
args = args..sep..arg
return arg
end

function binopcat(x,op,y) return eval(x)..op..eval(y) end

function sub(x,y) return binopcat(x,"-",y) end
function mul(x,y) return binopcat(x,"*",y) end
function div(x,y) return binopcat(x,"/",y) end

function compile(t)
args = ""  -- global, easier
local body = eval(t)
return dostring("return function("..args..") return "..body.." end")
end

-- here 1,2,3 are just place-holders for arguments during compile

-- now execute with real values
print( F(1,2,3) )
print( F(2,3,4) )
print( F(3,4,5) )
print( F(4,5,6) )
print( F(5,6,7) )

Has anyone ever written a Lua interpreter with Lua?

Cheers,

Dave

```