diff options
Diffstat (limited to 'dot_config/nvim/fnl')
| -rw-r--r-- | dot_config/nvim/fnl/toast/core.fnl | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/dot_config/nvim/fnl/toast/core.fnl b/dot_config/nvim/fnl/toast/core.fnl index 54b0455..3c77e4a 100644 --- a/dot_config/nvim/fnl/toast/core.fnl +++ b/dot_config/nvim/fnl/toast/core.fnl @@ -12,6 +12,9 @@ (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)) @@ -21,27 +24,31 @@ (fn group [n xs] "Group elements in xs in groups of n. Extra elements at the end will sit in the final group. - For example, (group 2 [1 2 3 4 5]) results in [[1 2] [3 4] [5]]." - (let [ll #(length (last $)) - donext #(= (ll $) n)] - (accumulate [out [[]] - _ v (ipairs xs)] - (do (when (donext out) - (insert out [])) - (insert (last out) v) - out)))) + For example, (group 2 [1 2 3 4 5]) results in [[1 2] [3 4] [5]]. + One exception is if xs is empty, in which case an empty collection is returned." + (if (empty? xs) + [] + (let [ll #(length (last $)) + donext #(= (ll $) n)] + (accumulate [out [[]] + _ v (ipairs xs)] + (do (when (donext out) + (insert out [])) + (insert (last out) v + out)))))) (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)] (let [mapped (f v)] (insert out (if (= 0 (select :# mapped)) - nil - mapped))))) + nil + mapped))))) {: dec : inc : drop + : empty? : group : first : last} |
