  lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

• 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:
>> {add,7,{mul,4,3}}
>> 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(t,t)..")"
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 add(x,y) return binopcat(x,"+",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
F = compile{add,1,{mul,2,3}}

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

```