diff options
Diffstat (limited to 'dot_config/nvim/fnl/toast/core.fnl')
| -rw-r--r-- | dot_config/nvim/fnl/toast/core.fnl | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/dot_config/nvim/fnl/toast/core.fnl b/dot_config/nvim/fnl/toast/core.fnl index 3c77e4a..16e69c2 100644 --- a/dot_config/nvim/fnl/toast/core.fnl +++ b/dot_config/nvim/fnl/toast/core.fnl @@ -1,20 +1,31 @@ -(local {: insert} (require :toast.table)) +(local {: insert : unpack} (require :toast.table)) +; math (fn dec [n] "Decrement n by 1." (- n 1)) (fn inc [n] "Increment n by 1." (+ n 1)) + +; checks? +(fn empty? [xs] + "Returns true if the lengthable contains no elements." + (= 0 (length xs))) +(fn nil? [x] + "Returns true if the argument is nil." + (= nil x)) +(fn number? [n] + "Returns true if the argument is a number." + (= :number (type n))) + +; sequences (fn drop [n xs] "Returns a table of all but the first n elements in xs." (let [out []] (each [i v (ipairs xs)] (when (> i n) (insert out v))) out)) -(fn empty? [xs] - "Returns true if the lengthable contains no elements." - (= 0 (length xs))) (fn first [xs] "The first element in a sequential table." (. xs 1)) @@ -36,19 +47,45 @@ (insert out [])) (insert (last out) v out)))))) + +; HOF +(fn assoc [?t ...] + "Sets the key `k` in table `t` to the value `v`. + Accepts an arbitrary amount of `k` and `v` pairs. + Returns the mutated table `t`." + (let [t (or ?t {}) + lt (inc (length t)) ; for numerical keys + [k v & xs] [...]] + (case k + nil nil + (where k (and (number? k) (> lt k))) (tset t k v) ; TODO: (set (. t k) v) + (where k (and (number? k) (= k lt))) (table.insert t k v) + _ (tset t k v)) + (case (length xs) + 0 t + 1 (error "assoc expects even number of arguments after table, found odd number") + _ (assoc t (unpack xs))))) (fn map [f xs] "Returns a sequential table consisting of the result of apply f to every item in xs." (accumulate [out [] - _ v (ipairs xs)] + _ v (ipairs (or xs []))] (let [mapped (f v)] (insert out (if (= 0 (select :# mapped)) nil mapped))))) -{: dec +{;math + : dec : inc - : drop + ; checks? : empty? - : group + : nil? + : number? + ; sequences + : drop : first - : last} + : last + : group + ; HOF + : assoc + : map} |
