diff options
| author | Hisham Muhammad <hisham@gobolinux.org> | 2018-07-17 15:59:23 -0300 |
|---|---|---|
| committer | Hisham Muhammad <hisham@gobolinux.org> | 2018-07-18 11:24:07 -0300 |
| commit | 7754f6a90d99fd6108b16d7a6771cfd6c0739544 (patch) | |
| tree | cc916a6e381239f706ea5782789127ab9f931287 | |
| parent | e5e0e691445b81be7dad2f8eb2d73c558ebbf921 (diff) | |
| download | luarocks-7754f6a90d99fd6108b16d7a6771cfd6c0739544.tar.gz luarocks-7754f6a90d99fd6108b16d7a6771cfd6c0739544.tar.bz2 luarocks-7754f6a90d99fd6108b16d7a6771cfd6c0739544.zip | |
fun: add fun.partial and fun.flip
| -rw-r--r-- | src/luarocks/fun.lua | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/luarocks/fun.lua b/src/luarocks/fun.lua index dfdf36ed..b1740833 100644 --- a/src/luarocks/fun.lua +++ b/src/luarocks/fun.lua | |||
| @@ -2,6 +2,8 @@ | |||
| 2 | --- A set of basic functional utilities | 2 | --- A set of basic functional utilities |
| 3 | local fun = {} | 3 | local fun = {} |
| 4 | 4 | ||
| 5 | local unpack = table.unpack or unpack | ||
| 6 | |||
| 5 | function fun.concat(xs, ys) | 7 | function fun.concat(xs, ys) |
| 6 | local rs = {} | 8 | local rs = {} |
| 7 | local n = #xs | 9 | local n = #xs |
| @@ -63,4 +65,39 @@ function fun.sort_in(t, f) | |||
| 63 | return t | 65 | return t |
| 64 | end | 66 | end |
| 65 | 67 | ||
| 68 | function fun.flip(f) | ||
| 69 | return function(a, b) | ||
| 70 | return f(b, a) | ||
| 71 | end | ||
| 72 | end | ||
| 73 | |||
| 74 | function fun.partial(f, ...) | ||
| 75 | local n = select("#", ...) | ||
| 76 | if n == 1 then | ||
| 77 | local a = ... | ||
| 78 | return function(...) | ||
| 79 | return f(a, ...) | ||
| 80 | end | ||
| 81 | elseif n == 2 then | ||
| 82 | local a, b = ... | ||
| 83 | return function(...) | ||
| 84 | return f(a, b, ...) | ||
| 85 | end | ||
| 86 | else | ||
| 87 | local pargs = { n = n, ... } | ||
| 88 | return function(...) | ||
| 89 | local m = select("#", ...) | ||
| 90 | local fargs = { ... } | ||
| 91 | local args = {} | ||
| 92 | for i = 1, n do | ||
| 93 | args[i] = pargs[i] | ||
| 94 | end | ||
| 95 | for i = 1, m do | ||
| 96 | args[i+n] = fargs[i] | ||
| 97 | end | ||
| 98 | return f(table.unpack(args, 1, n+m)) | ||
| 99 | end | ||
| 100 | end | ||
| 101 | end | ||
| 102 | |||
| 66 | return fun | 103 | return fun |
