lua-lambda/lambda.lua

27 lines
499 B
Lua

local load = loadstring or load
local lambda_template = "return function %s return %s end"
local cache = {}
-- Lambda Format: l"(args) exp"
local function l(s)
if not cache[s] then
cache[s] = load(lambda_template:format(s:match("(%b()) (.+)$")))()
end
return cache[s]
end
-- Tests --
do
local x = "Test"
local f = l"(x) x"
assert(f(x) == x, "Lambda Test Failed!")
end
do
local t = {1,2,3,4,5,6,7,8,9}
table.sort(t, l"(a,b) a > b")
assert(t[1] == 9, "Lamba Test Failed!")
end
return l