; uncouple (define (uncouple eql? xs) (let loop ((xs xs) (zs (list))) (cond ((null? xs) (reverse zs)) ((null? zs) (loop (cdr xs) (cons (car xs) zs))) ((eql? (car xs) (car zs)) (loop (cdr xs) (cdr zs))) (else (loop (cdr xs) (cons (car xs) zs)))))) (display (uncouple eq? '(red blue green green blue red yellow))) (newline) (display (uncouple eq? '(red red red))) (newline) (display (uncouple eq? '(red red))) (newline) (display (uncouple eq? '(red))) (newline) (display (uncouple eq? '())) (newline) (display (uncouple eq? '(red red blue blue))) (newline) (display (uncouple eq? '(red red blue green green))) (newline)