127 lines
2.3 KiB
Plaintext
127 lines
2.3 KiB
Plaintext
|
|
(fn slice (list idx) (do
|
|
(let list_len (len list))
|
|
(let elems (list))
|
|
(let i idx)
|
|
(loop (do
|
|
(if (>= i list_len) (break))
|
|
(push elems (at list i))
|
|
(+= i 1)
|
|
))
|
|
(return elems)
|
|
))
|
|
|
|
(fn slice_eq (str slice_idx substr) (do
|
|
(let str_len (len str))
|
|
(let substr_len (len substr))
|
|
(let i 0)
|
|
(loop (do
|
|
(if (>= i substr_len)
|
|
(return true))
|
|
(if (>= (+ slice_idx i) str_len)
|
|
(return false))
|
|
(if (!= (at str (+ slice_idx i)) (at substr i))
|
|
(return false))
|
|
(+= i 1)
|
|
))
|
|
(return true)
|
|
))
|
|
|
|
|
|
(fn contains (text ch) (do
|
|
(let text_len (len text))
|
|
(let i 0)
|
|
(loop (do
|
|
(if (>= i text_len) (break))
|
|
(if (== (at text i) ch) (do
|
|
(return true)
|
|
))
|
|
(+= i 1)
|
|
))
|
|
(return false)
|
|
))
|
|
|
|
(fn indent (depth) (do
|
|
(let space "")
|
|
(let i 0)
|
|
(loop (do
|
|
(if (>= i depth) (break))
|
|
(+= space " ")
|
|
(+= i 1)
|
|
))
|
|
(return space)
|
|
))
|
|
|
|
(fn list_push (list_ value) (do
|
|
(let list_len (len list_))
|
|
(let i 0)
|
|
(loop (do
|
|
(if (>= i list_len) (break))
|
|
(if (== (at list_ i) null) (do
|
|
(set list_ i value)
|
|
(return)
|
|
))
|
|
(+= i 1)
|
|
))
|
|
(push list_ value)
|
|
))
|
|
|
|
(fn list_pop (list_) (do
|
|
(let i (- (len list_) 1))
|
|
(loop (do
|
|
(if (< i 0) (break))
|
|
(let value (at list_ i))
|
|
(if (!= value null) (do
|
|
(set list_ i null)
|
|
(return value)
|
|
))
|
|
(-= i 1)
|
|
))
|
|
(return null)
|
|
))
|
|
|
|
(fn list_contains (list_ value) (do
|
|
(for elem list_ (do
|
|
(if (== elem value) (do
|
|
(return true)
|
|
))
|
|
))
|
|
(return false)
|
|
))
|
|
|
|
(fn map () (do
|
|
(return (list))
|
|
))
|
|
|
|
(fn map_has (map key) (do
|
|
(for (m_key _) map (do
|
|
(if (== m_key key) (do
|
|
(return true)
|
|
))
|
|
))
|
|
(return false)
|
|
))
|
|
|
|
(fn map_get (map key) (do
|
|
(for (m_key value) map (do
|
|
(if (== m_key key) (do
|
|
(return value)
|
|
))
|
|
))
|
|
(return null)
|
|
))
|
|
|
|
(fn map_set (map key value) (do
|
|
(for entry map (do
|
|
(let (entry_key _) entry)
|
|
(if (== entry_key key) (do
|
|
(set entry 1 value)
|
|
(return)
|
|
))
|
|
))
|
|
(push map (list key value))
|
|
))
|
|
|
|
|
|
|