summaryrefslogtreecommitdiff
path: root/dot_config/nvim/fnl
diff options
context:
space:
mode:
authorChloƩ Vulquin <code@toast.bunkerlabs.net>2024-07-24 19:34:51 +0200
committerChloƩ Vulquin <code@toast.bunkerlabs.net>2024-07-24 19:34:51 +0200
commitf490412f54b2c9479159bd6481cb85c42fd281ab (patch)
tree5b3732219ae2c999e533462174373309b59274f6 /dot_config/nvim/fnl
parentnvim: rewrite config in fennel (diff)
nvim: add empty? and update group
Until now you couldn't do `(tbl 1 2)`. Now you can.
Diffstat (limited to '')
-rw-r--r--dot_config/nvim/fnl/toast/core.fnl29
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}