martes, 4 de octubre de 2011

Ejercicios en Prolog

En esta entrada resolveremos algunos ejercicios en Prolog.



Dados dos numeros, indique el menor de ellos

menor(X,Y,Z) :- X>Y, Z is Y.
menor(X,Y,Z) :- Y>X, Z is X.

Z contiene el numero menor entre X e Y.

Dados dos numeros (x e y), devolver el residuo de X/Y

residuo(X,Y,Z) :- X<Y, Z is X.
residuo(X,Y,Z) :- X1 is X-Y, residuo(X1,Y,Z1), Z is Z1.

Z es la variable que contiene el residuo de dividir X/Y.

Dada la funcion residuo y un numero, mostrar los divisores de un numero

divisores(X,Y) :- Y=1.
divisores(X,Y) :- residuo(X,Y,Z), Z=0, writeln(Y,'es divisor de',X), divisores(X,Y-1).
divisores(X,Y) :- divisores(X,Y-1).
residuo(X,Y,Z) :- X<Y, Z is X.
residuo(X,Y,Z) :- X1 is X-Y, residuo(X1,Y,Z1), Z is Z1.
muestraDivisores(X) :- divisores(X,X).

En este ejercicio reutilizamos la funcion residuo del ejercicio anterior, para mostrar todos los divisores de X solo llamamos a la funcion muestraDivisores.

Buscar un elemento en una lista

pertenece(X,[M|N]) :- X=M.
pertenece(X,[M|N]) :- (X,N).

Esta funcion devuelve true o false si la variable X pertenece a la lista.

Insertar un elemento al inicio de una lista

insertaInicio(X,L,Z) :- Z is [X|L].

X es el elemento a insertar, L es la lista y Z es la nueva lista con el elemento X al inicio.

Insertar un elemento al final de una lista

insertaFinal(X,L,Z) :- L=[], Z is [X].
insertaFinal(X,[L|Lr],Z) :- insertaFinal(X,Lr,Z1), Z is [L|Z1].

X es el elemento a insertar al final, L es la lista y Z es la nueva lista con el elemento X al final.

Sumar todos los elementos de una lista

suma([H|T],Y) :- T=[], Y is H.
suma([H|T],Y) :- suma(T,Y1), Y is H+Y1.

[H|T] es la lista, Y devuelve la suma de todos sus elementos.

Dadas dos listas, determinar si estas son iguales

soniguales([M|N],[P|Q]) :- M=P, soniguales(N,Q).
soniguales(M,N) :- M=[], N=[].

Esta funcion devuelve true o false si las listas son iguales o no.

Dado un numero, devuelva su factorial

factorial(N,F) :- N>1, N1 is N-1, factorial(N1,F1), F is N*F1.
factorial(N,F) :- N=1, F is 1.

N es el numero a calcular su factoria y F es el factorial de N.

Hacer un programa para el calculo del numero fibonacci

fibo(X,N) :- X=0, N is 1.
fibo(X,N) :- X=1, N is 1.
fibo(X,N) :- X>1, fibo(X-1,N1), fibo(X-2,N2), N is N1+N2.

N devuelve el numero fibonacci de X.

No hay comentarios:

Publicar un comentario