Para escolher a implementação do scheme que você quer usar no DrScheme, basta clicar no canto inferior esquerdo do editor e ir em “escolher linguagem”, dê preferência pra uma linguagem que seja R5RS, que é um padrão de implementação da linguagem… seu código tem chances de ser mais portável assim… a implementação que é usada no Teach Yourself Scheme… é a mzscheme.
Agora quanto ao seu problema, vou te dar umas dicas de como eu cheguei a resolução, mas tenha em mente que este não é o melhor jeito de resolver, foi mais uma implementação-de-cinco-minutos, mas que serve pra ilustrar a lógica principal do algorítmo.
Criei uma procedure que recebe uma lista como parâmetro e usa uma lista auxiliar para armazenar os elementos distintos.
Usei um named let pra percorrer por cada elemento da lista que foi recebida como parametro e utilizo sua procedure contem? para verificar se o elemento está contido na minha lista auxiliar de elementos distintos. Se o elemento já está contido na lista eu prossigo no named let, apenas passando como parametro o cdr (que no seu caso seria a função rest) da lista e a lista auxiliar, caso contrário passo o cdr da lista e a lista auxiliar + o elemento que ainda não foi inserido. Algo mais ou menos assim:
(if (contem? (car lst) lst-aux) (loop (cdr lst) lst-aux))
(else (loop (cdr lst) (cons (car lst) lst-aux))))))
Quebra a cabeça pra resolver isso aí, no ínicio o scheme é meio esquisitão mesmo…