diff options
| author | 2024-08-07 21:51:15 +0200 | |
|---|---|---|
| committer | 2024-08-07 21:51:15 +0200 | |
| commit | 23d6644dbe76e22d8558657bfede7b5d471d6383 (patch) | |
| tree | 6ef0b96be5a3e840548d125a208bca4d262d8827 /dot_config/nvim/lua/toast | |
| parent | nvim: move mini plugin into a single file (diff) | |
nvim: rework mixed-table macro
I didn't like that you couldn't keep mixing and matching, so I made it
so you can.
In the process, I also implemented even?, odd?, filter, mapcat, flat,
and concat.
Some of them didn't end up needing to exist, and the entire :toast.
namespace does need to be cleaned up.
Then again, it's not like I'm selling this like an alternative stdlib.
I should really try and port all of clojure.core though, it'd be funny.
Diffstat (limited to 'dot_config/nvim/lua/toast')
| -rw-r--r-- | dot_config/nvim/lua/toast/core.lua | 42 | ||||
| -rw-r--r-- | dot_config/nvim/lua/toast/table.lua | 16 |
2 files changed, 51 insertions, 7 deletions
diff --git a/dot_config/nvim/lua/toast/core.lua b/dot_config/nvim/lua/toast/core.lua index 6daae14..2e5ba69 100644 --- a/dot_config/nvim/lua/toast/core.lua +++ b/dot_config/nvim/lua/toast/core.lua @@ -17,6 +17,12 @@ end local function number_3f(n) return ("number" == type(n)) end +local function even_3f(n) + return (number_3f(n) and (0 == (n % 2))) +end +local function odd_3f(n) + return (number_3f(n) and (0 ~= (n % 2))) +end local function every_3f(pred, xs) local pass = true for _, x in ipairs(xs) do @@ -108,19 +114,49 @@ local function assoc(_3ft, ...) return assoc(t, unpack(xs)) end end +local function filter(f, xs) + local out = {} + for k, v in ipairs(xs) do + if f(k, v) then + out = insert(out, v) + else + out = out + end + end + return out +end local function map(f, xs) local out = {} for _, v in ipairs((xs or {})) do local mapped = f(v) - local function _15_() + local function _16_() if (0 == select("#", mapped)) then return nil else return mapped end end - out = insert(out, _15_()) + out = insert(out, _16_()) end return out end -return {dec = dec, inc = inc, ["empty?"] = empty_3f, ["nil?"] = nil_3f, ["number?"] = number_3f, ["every?"] = every_3f, drop = drop, first = first, last = last, group = group, assoc = assoc, map = map} +local function mapcat(f, xs) + local out = {} + for _, v in ipairs(xs) do + for _0, v0 in ipairs(f(v)) do + table.insert(out, v0) + end + out = out + end + return out +end +local function flat(xs) + local _17_ = type(xs) + if (_17_ == "table") then + return mapcat(flat, xs) + else + local _ = _17_ + return {xs} + end +end +return {dec = dec, inc = inc, ["empty?"] = empty_3f, ["nil?"] = nil_3f, ["number?"] = number_3f, ["even?"] = even_3f, ["odd?"] = odd_3f, ["every?"] = every_3f, drop = drop, first = first, last = last, group = group, flat = flat, assoc = assoc, filter = filter, map = map, mapcat = mapcat} diff --git a/dot_config/nvim/lua/toast/table.lua b/dot_config/nvim/lua/toast/table.lua index a898a5e..e9c1baf 100644 --- a/dot_config/nvim/lua/toast/table.lua +++ b/dot_config/nvim/lua/toast/table.lua @@ -2,9 +2,8 @@ local function from_pairs(t, _3fmut) local out = (_3fmut or {}) for _, _1_ in ipairs(t) do - local _each_2_ = _1_ - local k = _each_2_[1] - local v = _each_2_[2] + local k = _1_[1] + local v = _1_[2] out[k] = v end return out @@ -13,5 +12,14 @@ local function insert(t, ...) table.insert(t, ...) return t end +local function concat(...) + local out = {} + for _, xs in ipairs({...}) do + for _0, v in ipairs(xs) do + insert(out, v) + end + end + return out +end local unpack = (table.unpack or unpack) -return {["from-pairs"] = from_pairs, insert = insert, unpack = unpack} +return {["from-pairs"] = from_pairs, insert = insert, unpack = unpack, concat = concat} |
