domingo, 31 de octubre de 2010

PROLOG - Cuatro Perros

Lenguajes de Programación - PUNTOS EXTRA

Se establece el siguiente razonamiento:

CUATRO PERROS

Tenemos cuatro perros: un galgo, un dogo, un alano y un podenco. Éste último come más que el galgo; el alano come más que el galgo y menos que el dogo, pero éste come más que el podenco. ¿Cuál de los cuatro será más barato de mantener?

La crisis esta dura, queremos una mascota y necesitamos saber cuál de todos los perros que nos mostraron en la tienda de mascotas es mas barato de mantener, analizando el problema mentalmente tenemos las siguientes proposiciones:

El Podenco come más que el Galgo.
EL Alano come más que el Galgo.
El Dogo come más que el Alano.
El Alano come más que el Podenco.

Entonces el orden (del más caro de mantener, al mas barato) es el siguiente:

1. DOGO
2. ALANO
3. PODENCO
4. GALGO

El Galgo es el mas barato a la larga, asi que corremos a comprarlo. ^_^

Vamos a analizar el mismo problema en PROLOG.

Primero convertimos las proposiciones a hechos para que sean compatibles con PROLOG, los hechos se basaran en "quien come mas que quien", es decir, tendremos esta sintaxis en los hechos:

come_mas(X , Y) "X come mas que Y.

Entonces:

come_mas(podenco, galgo).
come_mas(alano, galgo).
come_mas(dogo, alano).
come_mas(alano, podenco).

La regla se basara obviamente en "quien come menos de todos los demas", asi que generalizaremos la regla de la siguiente manera

come_menos(X, _) "X come menos que todos"

Esta regla aplica entonces a la inversa del hecho "quien come mas que quien", es decir, para evaluar quien come menos necesitamos el miembro Y del que come mas.

Entonces la regla queda así:

come_menos(X,_) :- come_mas(_,X).

PROGRAMA COMPLETO:

come_mas(podenco, galgo).
come_mas(alano, galgo).
come_mas(dogo, alano).
come_mas(alano, podenco).

come_menos(X,_) :-
come_mas(_,X).

Abrimos un archivo en emacs y lo llamaremos "perros.pro" (en terminal tecleamos: emacs -nw perros.pro ), tecleamos el código que les acabo de mostrar y guardamos todo.
Despues procedemos a abrir el interprete SWI-PROLOG:


Posteriormente cargamos el código que acabmos de guardar:


Ahora evaluamos el problema:

come_menos(X, _) "Quien come menos que todos?"

EJECUCIÓN:


Efectivamente, PROLOG nos responde que el Galgo come menos que todos los demas perros, ahora estamos mas que convencidos de comprar un Galgo.

SALUDOS!!! ^_^

1 comentario:

  1. Perfecto :) Tres puntos extra por esta entrada que servirá de modelo para los demás.

    ResponderEliminar