(define (partition pred lis) (let recur ((lis lis)) (if (null-list? lis) (values lis lis) (let ((elt (car lis)) (tail (cdr lis))) (receive (in out) (recur tail) (if (pred elt) (values (if (pair? out) (cons elt in) lis) out) (values in (if (pair? in) (cons elt out) lis))))))))) ; ; ↓ ↑ ; $ define $ partition pred lis $ let recur $ $ lis lis $ if $ null-list? lis $ values lis lis $ let $ $ elt $ car