phi-lang/stdlib.phi
2025-09-23 23:54:07 +02:00

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))
))