Начните с процедуры, которая просто создает копию переданного списка (очень легко сделать):
(define (unique-elements seq)
(define (loop ans rest)
(cond ((null? rest) ans)
(else
(loop (cons (car rest) ans)
(cdr rest)))))
(loop '() seq))
Чтобы гарантировать, что элементы выходного списка уникальны, мы должны пропустить CONS, если глава REST уже является членом ANS. Поэтому мы добавляем еще одно условие, чтобы сделать это:
;;; Create list containing elements of SEQ, discarding duplicates.
(define (unique-elements seq)
(define (loop ans rest)
(cond ((null? rest) ans)
((member (car rest) ans) ; *new*
(loop ans (cdr rest))) ; *new*
(else
(loop (cons (car rest) ans)
(cdr rest)))))
(loop '() seq))