Files
linguist/samples/Terra/calc.t
2016-01-28 11:22:27 +07:00

34 lines
814 B
Perl

function makecalcfn(inst)
local stk = {}
for i,v in ipairs(inst) do
if type(v) == "number" then
table.insert(stk,`v)
else
local b = table.remove(stk)
local a = table.remove(stk)
if v == "+" then
table.insert(stk,`a + b)
elseif v == "-" then
table.insert(stk,`a - b)
elseif v == "*" then
table.insert(stk,`a * b)
elseif v == "/" then
table.insert(stk,`a / b)
end
end
end
local result = table.remove(stk)
local terra wrapper()
return result
end
return wrapper
end
local calcfn = makecalcfn({5,4,"*",5,"-",3,"+"})
local test = require("test")
test.eq(calcfn(),18)