Cómo eliminar duplicados en Prolog

Prolog es un lenguaje de programación declarativo comúnmente utilizado en inteligencia artificial e investigación lingüística. A diferencia de los lenguajes de procedimiento más comunes, la mayoría de los programas de Prolog se definen como una serie de reglas y ecuaciones, en lugar de una serie de pasos. El siguiente código describe el proceso para eliminar duplicados de una lista en Prolog.

Paso 1

Abra un editor de texto, como el Bloc de notas, y guarde su archivo con el nombre "remove_dups.pl".

Paso 2

Escriba el código entre las barras (sin incluir las barras):

/ % remove_dups(+List, -NewList):% New List isbound to List, pero con elementos duplicados eliminados. remove_dups([], []).

remove_dups([Primero | Resto], NuevoResto) :- miembro(Primero, Resto), remove_dups(Resto, NuevoResto).

remove_dups([Primero | Resto], [Primero | NuevoResto]) :- not(miembro(Primero, Resto)), remove_dups(Resto, NuevoResto). //P>

La función "remove_dups" se define como una serie de tres reglas. La primera regla ("remove_dups([],[].)") especifica que si la lista está vacía, no se debe hacer nada; la función simplemente debería regresar. La segunda regla especifica que si el primer elemento de la lista aparece en cualquier otro lugar de la lista, debe eliminarse (ya que es un duplicado) y el procesamiento debe continuar usando el resto de la lista llamando a la función remove_dups nuevamente con el primer elemento. en la lista que quedó. La regla final especifica que si el primer miembro de la lista no está presente en otra parte de la lista, debe conservarse y el procesamiento debe continuar.

Paso 3

Guarde su trabajo presionando "Ctrl" y "S" al mismo tiempo.

Consejo

Mientras que los lenguajes como C y Java generalmente resuelven problemas usando bucles iterativos, los lenguajes declarativos y funcionales como Prolog generalmente resuelven problemas recursivamente o llamando repetidamente a la misma función en un conjunto cada vez más pequeño de datos totales. Algunos problemas son mucho más fáciles de resolver con la recursividad, aunque puede ser difícil de aprender para los programadores acostumbrados a usar solo bucles iterativos para resolver problemas.