Task

Select certain elements from an Array into a new Array in a generic way.



To demonstrate, select all even numbers from an Array.

As an option, give a second solution which filters destructively,
by modifying the original Array rather than creating a new Array.




 
(define filter
  (lambda (fn lst)
    (let iter ((lst lst) (result '()))
      (if (null? lst)
         (reverse result)
         (let ((item (car lst))
               (rest (cdr lst)))
           (if (fn item)
               (iter rest (cons item result))
               (iter rest result)))))))
 