; even-odd partition
(define (even-odd vec)
(define (swap! a b)
(let ((t (vector-ref vec a)))
(vector-set! vec a (vector-ref vec b))
(vector-set! vec b t)))
(let loop ((lo 0) (hi (- (vector-length vec) 1)))
(cond ((= lo hi) vec)
((even? (vector-ref vec lo)) (loop (+ lo 1) hi))
(else (swap! lo hi) (loop lo (- hi 1))))))
(display (even-odd '#(1 2 3 4 5 6 7 8 9)))