From 01586921b3d5f2ac1ccf8196d3ad9b4b3ddd31f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chlo=C3=A9=20Vulquin?= Date: Wed, 24 Jul 2024 19:19:26 +0200 Subject: nvim: rewrite config in fennel One file isn't done, and there's also the question of ftplugin and co. One step at a time though, eh? --- dot_config/nvim/fnl/toast/core.fnl | 47 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 dot_config/nvim/fnl/toast/core.fnl (limited to 'dot_config/nvim/fnl/toast/core.fnl') diff --git a/dot_config/nvim/fnl/toast/core.fnl b/dot_config/nvim/fnl/toast/core.fnl new file mode 100644 index 0000000..54b0455 --- /dev/null +++ b/dot_config/nvim/fnl/toast/core.fnl @@ -0,0 +1,47 @@ +(local {: insert} (require :toast.table)) + +(fn dec [n] + "Decrement n by 1." + (- n 1)) +(fn inc [n] + "Increment n by 1." + (+ n 1)) +(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 first [xs] + "The first element in a sequential table." + (. xs 1)) +(fn last [xs] + "The last element in a sequential table." + (. xs (length xs))) +(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)))) +(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))))) + +{: dec + : inc + : drop + : group + : first + : last} -- cgit v1.2.3