function map(f, ...) local t = {} for k, v in ipairs(...) do t[#t+1] = f(v) end return t end function timestwo(n) return n * 2 end function squared(n) return n ^ 2 end function partial(f, arg) return function(...) return f(arg, ...) end end timestwo_s = partial(map, timestwo) squared_s = partial(map, squared) print(table.concat(timestwo_s{0, 1, 2, 3}, ', ')) print(table.concat(squared_s{0, 1, 2, 3}, ', ')) print(table.concat(timestwo_s{2, 4, 6, 8}, ', ')) print(table.concat(squared_s{2, 4, 6, 8}, ', '))