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.

1 comentario:

Anónimo dijo...

me gustaría saber si dar clases para ayudarme con unos ejercicios. En caso que si favor de escribir a cris12life@hotmail.com

Publicar un comentario

Deja tu Comentario