application/octet-stream
•
1.06 KB
•
51 lines
; Some functions dealing with arrays
[defun array/+= [a i v]
[array/set! a i [+ v [array/ref a i]]]
]
[defun array/++ [a i]
[array/+= a i 1]
]
[defun array/fill! [a v i]
"Fills array a with value v"
[cond [[>= [int i] [array/length a]] a]
[#t [array/set! a [int i] v] [array/fill! a v [+ 1 i]]]
]
a
]
[defun array/reduce [fun arr α]
[def i 0]
[def len [array/length arr]]
[while [< i len]
[set! α [fun α [arr i]]]
[++ i]
]
α
]
[defun array/map [fun arr]
[def i 0]
[def len [array/length arr]]
[while [< i len]
[array/set! arr i [fun [arr i]]]
[++ i]
]
arr
]
[defun array/filter [pred arr]
[def ai 0]
[def ri 0]
[def len [array/length arr]]
[def ret [array/allocate len]]
[while [< ai len]
[when [pred [arr ai]]
[array/set! ret ri [arr ai]]
[++ ri]]
[++ ai]
]
[array/length! ret ri]
]