added userlib reduce function
Signed-off-by: Ava Hahn <ava@sunnypup.io>
This commit is contained in:
parent
3f75157fac
commit
4f6622730a
3 changed files with 28 additions and 1 deletions
|
|
@ -64,3 +64,24 @@ result is added to a new list. Returns the new list.'
|
|||
(set (q result) (cons result current-res))
|
||||
(set (q list-iter) (pop remaining))))
|
||||
result))
|
||||
|
||||
(def reduce
|
||||
'Takes two arguments: a function and a list.
|
||||
The function is expected to take two arguments:
|
||||
* the current list item
|
||||
* the previous result
|
||||
Initially the function will take element1 and element2, outputting result1.
|
||||
Then the function will take result1 and element3, outputting result2.
|
||||
this will continue iuntil the list is exhausted.'
|
||||
(func list)
|
||||
(let ((list-iter (pop list))
|
||||
(result (car list-iter)))
|
||||
(set (q list-iter) (pop (cdr list-iter)))
|
||||
(if (lt? (len list) 2)
|
||||
(echo "list too short!")
|
||||
(while (gt? (len list-iter) 1)
|
||||
(let ((current (car list-iter))
|
||||
(remaining (cdr list-iter)))
|
||||
(set (q result) (func result current))
|
||||
(set (q list-iter) (pop remaining)))))
|
||||
result))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue