Prolog

Codigo en Prolog para calcular el inverso de una lista

% Si queremos calcular la inversa de una lista. 
% La inversa de una lista vacia es una lista vacia.
% La inversa de H|T es la inversa de T concatenada con H.

inversa([],[]).
inversa([H|T],L):-  inversa(T,R),  concatenar(R,[H],L).

?- inversa([a,b,c,d],[d,c,b,a]).
   Yes

% Utilizando un parametro acumulador.

inver(L1,L2):-inver(L1,L2,[]).

inver([],L,L).
inver([H|T],L,S):-inver(T,L,[H|S]).

?- inver([a,b,c,d],[d,c,b,a]).
   Yes

Codigo en Prolog para concatenar o unir dos listas lista

% Si queremos concatenar dos listas lista. 
% Concatenar una lista vacia con L es L.
% Concatenar X|L1 con L2 es poner el primer 
% elemento de la primera lista (X) más la 
% concatenación del resto de la lista (L1) con L2

concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]):-concatenar(L1,L2,L3).

?- concatenar([1,2],[3,4],R).
R = [1, 2, 3, 4].

Codigo en Prolog para eliminar un elemento de la lista

% Si queremos eliminar un elemento de la lista.
% Si X es la cabeza de la lista, la cola T es la lista sin X
% Si X no es la cabeza de la lista, conservamos la cabeza de la lista 
%     como parte de la respuesta y continuamos eliminando X de la cola T.
elimina(X,[X|T],T).
elimina(X,[H|T],[H|T1]):- elimina(X,T,T1).

?- elimina(1,[1,2,3,4],R).
   R = [2,3,4]
?- elimina(1,R,[2,3]).
   R = [1, 2, 3]  
   R = [2, 1, 3]  
   R = [2, 3, 1]  

Codigo en Prolog para sacar el tamaño o longitud de una lista


% Si queremos hallar la longitud de una lista.
% La longitud de una lista vacia es 0.
% La longitud de cualquier lista es la longitud de la cola + 1.

longitud([],0).
longitud([H|T],N):-longitud(T,N0), N is N0 + 1.

?- longitud([a,b,c],L).
   3
?- longitud([a,b,c],4).
   No

Codigo en Prolog para resolver la Factorial de un numero

% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)
factorial(0, 1) :- !.
factorial(N, F) :- N1 is N - 1, factorial(N1, F1), F is N*F1.

%el factorial se llama recursivamente dejando el resultado en F 

Codigo en Prolog para resolver la Serie de Fibonacci

% Recursividad
%Serie de Fibonacci
%1,1,2,3,5,8,13,21,34,55,.......

% Prolog no permite poner operaciones dentro de los argumentos ya que prolog funciona por comparacion
%no puede hacer las operaciones al momento, hay que hace la operacion antes 
%y se asigna a una variable mediante la palabra reserveda is
fibonacci(1,1).
fibonacci(2,1).
fibonacci(P,Z):-P>2,Q is P-1,fibonacci(Q,A),R is P-2,fibonacci(R,B),Z is A+B.


%Serie de Fibonacci
%F(n + 1) = F(n) + F(n - 1)
%1,1,4,7,19,40,....
fibonacci(P,Z):-P>3
	,Q is P-1
	,fibonacci(Q,A)
	,R is P-2
	,fibonacci(R,B)

Codigo en Prolog para resolver las torres de hanoi

Codigo para resolver las torres de hanoi con un disco

%Torres de Hanoi
% Resuelve hanoi con un disco
hanoi(1,A,B,C):-write("Mueve del ",A," al ",C),nl.
hanoi(N,A,B,C):-N>1,M is N-1,hanoi(M,A,C,B),hanoi(1,A,B,C,),hanoi(M,B,A,C).
Distribuir contenido