;; 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 }