27 lines
499 B
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
|