Saltar al contenido

Pequeños ejemplos en PROLOG

Al comenzar a programar en cualquiera de los dialectos de PROLOG lo habitual es comenzar por pequeños trozos de código, al más típico estilo snippet, que supongan un ejercicio de análisis, implementación y prueba. Comprender pequeños problemas así da la capacidad de asimilar los grandes. PROLOG, en comparación con cualquier otro lenguaje procedimental, concentra la resolución al problema en pocas líneas de código, lo que a simple vista parece sencillo pero realmente es más complejo a la hora de comprender.
La idea es intentar solucionar el ejercicio propuesto sin mirar el código fuente para después compararlo con vuestra solución escrita. O estudiar la proporcionada si no dáis vosotros con una.
Si sólo deseas cacharrear con PROLOG y no instalar un intérprete siempre puedes utilizar uno on-line en http://ideone.com/.

María y Eva son mujeres. José está casado con maría y Manuel con Eva. Obtener los hombres a partir de los matrimonios.

mujer(maria).
mujer(eva).
marido(jose,maria).
marido(manuel,eva).
hombre(P):-mujer(M),marido(P,M).

Todo hombre es mortal. Platón y Pepe son hombres.


mortal(P):-hombre(P).
hombre(platon).
hombre(pepe).

Toda chica tiene un chico como novio. José es novio de María, Manuel de Pepita, Pepe de Eva. María, Pepita y Eva son chicas.


chico(P):-novio(P,M),chica(M).
novio(jose,maria).
novio(manuel,pepita).
novio(pepe,eva).
chica(maria).
chica(eva).
chica(pepita).

Toda persona tiene una madre. Rosa es la madre de Javiar, María la de Juan y Nuria la de Eva. Las madres son personas también.


persona(P):-persona(M),madre(P,M).
madre(javier,rosa).
madre(juan,maria).
madre(eva,nuria).
persona(maria).
persona(nuria).
persona(rosa).

Implementación de todos los números naturales.


nat(0).
nat(s(X)):-nat(X).

El inferior de dos números naturales.


inferior(0,0):-fail.
inferior(s(X),s(Y)):-inferior(X,Y).

Suma de dos números naturales.


suma(0,X,X).
suma(s(X),Y,s(Z)):-suma(X,Y,Z).

Implementación de la negación de un predicado.


not(P):-P,fail.
not(P).

Implementación de una instrución de salto condicional.


if(P,Q,R):-P,Q.
if(P,Q,R):-R.

Publicado enDesarrollo de software