Estoy usando Estudiante intermedio con Lambda en DrRacket, me preguntaba cómo se eliminarían los duplicados en una lista, mientras se mantiene el orden. Por ejemplo, (remove-dup (list 2 5 4 5 1 2))
produciría (list 2 5 4 1)
. Hasta ahora, tengo esto:Cómo deshacerse de los duplicados en una lista, pero mantenga el orden
(define (remove-duplicates lst)
(cond
[(empty? lst) empty]
[(member? (first lst) (rest lst))
(remove-duplicates (rest lst))]
[else (cons (first lst) (remove-duplicates (rest lst)))]))
, pero hay un problema ya que no mantiene el orden. ¿Alguien me puede apuntar en la dirección correcta? Gracias por tu tiempo.
En realidad, parece que * does * preserva el orden, simplemente no conserva el primero de los elementos duplicados. ¿Estás seguro de que tu solución es incorrecta? –
desafortunadamente la solución es incorrecta. Por ejemplo, si tengo remove-duplicates (1 2 5 1 4), quiero (list 1 2 5 4), en lugar del valor real de (list 2 5 1 4). Perdón por el mal ejemplo. –
Estaba pensando en hacer algo así como contras el 1er de la lista, y luego usar filtro en el resto de la lista con el 1er número. Excepto, no sé cómo implementar eso jaja. –