Cómo eliminar duplicados en Prolog

Prolog es lenguaje declarativo usado en IA y lingüística. A diferencia de los procedurales, los programas son reglas/ecuaciones, no pasos. El siguiente código elimina duplicados de una lista.

Paso 1

Abre editor (Bloc de notas) y guarda como remove_dups.pl.

Paso 2

Copia el código (sin las barras):

% remove_dups(+Lista, -NuevaLista):
% NuevaLista es Lista sin duplicados.
remove_dups([], []).
remove_dups([Primero | Resto], NuevaResto) :- member(Primero, Resto), remove_dups(Resto, NuevaResto).
remove_dups([Primero | Resto], [Primero | NuevaResto]) :- \+ member(Primero, Resto), remove_dups(Resto, NuevaResto).

Tres reglas:
1. Lista vacía → retorna vacía.
2. Si el primer elemento está en el resto → es duplicado, quítalo y recursión con el resto.
3. Si no está en el resto → consérvalo y recursión.

Paso 3

Guarda (Ctrl+S).

Consejo

C/Java usan bucles iterativos; Prolog y lenguajes funcionales usan recursión (llamar a la misma función con subconjuntos menores). Algunos problemas son más fáciles con recursión, aunque cuesta aprenderla si vienes de bucles.