Mostrando entradas con la etiqueta Prolog. Mostrar todas las entradas
Mostrando entradas con la etiqueta Prolog. Mostrar todas las entradas

martes, 30 de julio de 2013

Arbol Genealogico en Visual Prolog

Hoy les comparto un proyecto escolar que realice para una materia de programación donde nos enseñaron algo de PROLOG, esto fue hace algunos años (por no decir muchos), está hecho en Visual Prolog.
 


Proyecto: Elaborar un programa en Visual Prolog que utilice los hechos hijo, además utilizar los hechos hombre y mujer, utilizando un  menú, se ejecutará una búsqueda inteligente utilizando el proceso de razonamiento adecuado para cada una de las reglas.

El menú contiene las siguientes consultas:

1.    Buscar relación Tío.
2.    Buscar relación Sobrino.
3.    Buscar relación Abuela.
4.    Buscar relación Nieta.
5.    Buscar relación Hija.
6.    Buscar relación Bisnieto.
7.    Buscar relación Abuelo.
8.    Buscar relación Tía.
9.    Buscar relación Bisabuela.
10.  Buscar relación Sobrina.
11.  Buscar relación Prima.
12.  Buscar relación Hermano.
13.  Buscar relación Primo.
14.  Buscar relación Hermana.
15.  SALIR.


Ejemplo del Codigo en Ejecución.

Este es el código fuente, desacrgalo aqui:

domains
 OPC=integer.
 X,Y,Z,W,V=symbol.
predicates
 nondeterm hijo(symbol,symbol).
 nondeterm mujer(symbol).
 nondeterm hombre(symbol).
 nondeterm menu.
 nondeterm ciclo.
 nondeterm caso(integer).
 
clauses
 hijo(alfonso,francisca).
 hijo(gloria,francisca).
 hijo(guillermina,francisca).
 hijo(alejandra,francisca).
 hijo(fortino,francisca).
 hijo(salvador,francisca).
 hijo(lilia,francisca).
 hijo(socorro,francisca).
 hijo(joel,francisca).
 hijo(osiel,francisca).
 hijo(veronica,alfonso).
 hijo(javier,alfonso).
 hijo(alonso,alfonso).
 hijo(marco_a,alfonso).
 hijo(jose_a,alfonso).
 hijo(yadira,gloria).
 hijo(euripides,gloria).
 hijo(antonio,gloria).
 hijo(rita,gillermina).
 hijo(carlos,gillermina).
 hijo(malaquias,gillermina).
 hijo(david,gillermina).
 hijo(francisco,alejandra).
 hijo(esmirna,alejandra).
 hijo(alejandro,alejandra).
 hijo(hugo,alejandra).
 hijo(eslith,fortino).
 hijo(cristal,salvador).
 hijo(alma,salvador).
 hijo(oscar,lilia).
 hijo(uriel,lilia).
 hijo(mariela,lilia).
 hijo(silvia,socorro).
 hijo(samuel,socorro).
 hijo(selene,socorro).
 hijo(geovani,socorro).
 hijo(janeth,socorro).
 hijo(jonathan,socorro).
 hijo(perla,socorro).
 hijo(flor,socorro).
 hijo(guadalupe,socorro).
 hijo(francisco_j,osiel).
 hijo(eduardo,joel).
 hijo(javier_jr,javier).
 hijo(veronica_i,javier).
 hijo(ernesto,alonso).
 
 mujer(francisca).
 mujer(gloria).
 mujer(guillermina).
 mujer(alejandra).
 mujer(lilia).
 mujer(socorro).
 mujer(veronica).
 mujer(yadira).
 mujer(rita).
 mujer(emma).
 mujer(esmirna).
 mujer(eslith).
 mujer(cristal).
 mujer(alma).
 mujer(mariela).
 mujer(silvia).
 mujer(selene).
 mujer(janeth).
 mujer(perla).
 mujer(flor).
 mujer(guadalupe).
 mujer(veronica_i).
 
 hombre(alfonso).
 hombre(fortino).
 hombre(salvador).
 hombre(joel).
 hombre(osiel).
 hombre(javier).
 hombre(alonso).
 hombre(marco_a).
 hombre(jose_a).
 hombre(euripides).
 hombre(antonio).
 hombre(carlos).
 hombre(malaquias).
 hombre(david).
 hombre(francisco).
 hombre(alejandro).
 hombre(hugo).
 hombre(oscar).
 hombre(uriel).
 hombre(samuel).
 hombre(geovani).
 hombre(jonathan).
 hombre(francisco_j).
 hombre(eduardo).
 hombre(javier_jr).
 hombre(ernesto).
 
 

lunes, 4 de marzo de 2013

Prolog - Programación Logica

Platicando con una amiga sobre sus clases de la Universidad aprovecho la oportunidad para pedirme ayuda (raro en las mujeres ;-)) para resolver unos ejercicios sobre Lenguaje Prolog, me dije ¡WTF! ya no recuerdo nada de mis clases de Prolog y ademas mi maestro no era una eminencia, pero como no pude decir ¡NO! me vi obligado a buscar un buen manual y leerlo para recordar un poco (creo que estudie mas que cuando asistía a la universidad).

Pues bien, encontré el buen manual con muchos ejemplos pero ahora me faltaba el interprete, en el manual se mencionaba el SWI-Prolog (descarga) así que lo descargue para intentar cumplir con lo que había prometido.

Bueno después de unas noches de desvelo, aquí les dejo los ejercicios planteados y las soluciones, por si les sirve de algo.



1.- Hacer un programa en Prolog que compare dos números y me regrese la resta del mayor menos el menor, en caso de ser iguales me regrese cero(0).
Solución:
compara(N1,N2,R) :- N1>N2 , R is N1-N2.
compara(N1,N2,R) :- N1<N2, write('N1 es Menor a N2').
compara(N1,N2,R) :- N1=N2, R=0.


2.- Hacer un programa en Prolog que compare tres números, en caso de que todos sean diferentes que te regrese la suma de ellos, de lo contrario que te regrese la multiplicación.
Solucion:
compara(N1,N2,N3,R) :- N1\=N2, N1\=N3, N2\=N3, R is N1+N2+N3.
compara(N1,N2,N3,R) :-  R is N1*N2*N3.

3.- Hacer un programa en Prolog que compare tres números, y me regrese el mayor de los tres si todos son diferentes, en caso contrario me regrese  0.
Solucion:
compara(N1,N2,N3,R) :- N1\=N2, N1\=N3, N2\=N3, mayor(N1,N2,N3,R).
compara(N1,N2,N3,R) :-  R is N1*N2*N3.

mayor(X,Y,Z,R):-X>Y, X>Z, R is X.
mayor(X,Y,Z,R):-Y>X, Y>Z, R is Y.
mayor(X,Y,Z,R):-Z>X, Z>Y, R is Z.

4.- Elabore un programa que obtenga el siguiente resultado: suma(N) = 1 + 2 + 3 + 4 + ... + N
Solución
Esta solución la realice de la manera mas fácil con la formula (N*(N+1))/2, pero también podría hacerse utilizando recursividad (solo que no quise poner a trabajar mis neuronas).
suma(N,R):- R is (N*(N+1))/2.

5.- Elabore un programa que obtenga el siguiente resultado: suma2(N) = 1/2  +  2/3  +  3/4  +  4/5  + ... +  N / (N+1)
Solución:
suma2(N,R):- N=<0, R=0.
suma2(N,R):- N1 is N-1, suma2(N1,R2), R is (N/(N+1)).


Nota: Debo recordarle a mi amiga que me debe las 3 cervezas de rigor que ella me prometió y que aun sigo esperando.