参考までに私の改良を。
条件を満たすものと満たさないものを両方返す手続きで
2度filterにかける無駄を回避。
748さんのはこのdivideに近いと思います。
(define (divide f a)
 (let loop ((x '()) (y '()) (a a))
  (cond ((null? a) (list (reverse x) (reverse y)))
     ((f (car a)) (loop (cons (car a) x) y (cdr a)))
     (else (loop x (cons (car a) y) (cdr a))))))

(define (hoge f a)
 (let loop ((r '()) (a a))
  (if (null? a) (reverse r)
   (apply (lambda (x y) (loop (cons x r) y))
       (divide (lambda (x) (f (car a) x)) a)))))