9mm/lib/table.fnl
dozens c7b2c98200 🗄️ big tidy up
- isolate core game logic and move it to src/game.fnl
- main.fnl should be just the ui now
- move all table funcs into lib/table
- move all (1) string funcs into lib/string
- move all game funcs into lib/game/
2024-06-20 09:17:06 -06:00

52 lines
978 B
Fennel

;; table funs
(fn contains [t x]
"does table t contain element x?"
(accumulate [found false
_ v (ipairs t)
&until found] ; escape early
(or found (= x v))))
(fn head [t]
"return the first item in a table"
(if (> (length t) 0)
(?. t 1)
[]))
(fn tail [t]
"return the table minus the head"
(icollect [i v (ipairs t)]
(if (> i 1)
v)))
(fn keys [t]
"takes a table returns a sequential list of its keys"
(local out [])
(each [k v (pairs t)] (table.insert out k))
out)
(fn flip [t]
"takes a table of {key value} and returns a table of {value key}"
(collect [k v (pairs t)] (values v k)))
(fn print [tbl]
"print a table"
(each [k v (pairs tbl)]
(let [table? (= (type v) :table)]
(print k v))))
(fn slice [t start stop]
"return a slice of a table"
(fcollect [i start (or stop (length t))]
(. t i)))
{
: contains
: flip
: head
: keys
: print
: slice
: tail
}