Login
7 branches 0 tags
Ben (X13/Void) Update bootstrap libs 4ec9403 4 years ago 247 Commits
nujel / stdlib / array.nuj
; 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 len [array/length arr]]
       [for [i 0 len]
              [set! α [fun α [arr i]]]
       ]
       α
]

[defun array/map [fun arr]
       [def len [array/length arr]]
       [for [i 0 len]
              [array/set! arr i [fun [arr i]]]
       ]
       arr
]

[defun array/filter [pred arr]
       [def ri 0]
       [def len [array/length arr]]
       [def ret [array/allocate len]]
       [for [ai 0 len]
              [when [pred [arr ai]]
                    [array/set! ret ri [arr ai]]
                    [++ ri]]
       ]
       [array/length! ret ri]
]