s-99-08


S-99-08 Eliminate consecutive duplicates of list elements.

If a list contains repeated elements they should be replaced with a single copy of the element. The order of the elements should not be changed.

Example:

 (compress '(a a a a b c c a a d e e e e)) 
 ; => (a b c a d e) 

Solution:

 (define compress 
   (lambda (xs) 
     (cond ((null? xs) 
            '()) 
           ((null? (cdr xs)) 
            xs) 
           ((eq? (car xs) (cadr xs)) 
            (compress (cdr xs))) 
           (else 
             (cons (car xs) (compress (cdr xs)))))))