Prolog
% 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
% 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].
% 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]
% 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
% 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
% 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 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).
|
Comentarios recientes
hace 7 semanas 3 días
hace 19 semanas 5 días
hace 21 semanas 2 días
hace 21 semanas 5 días
hace 22 semanas 1 día
hace 22 semanas 5 días
hace 24 semanas 1 día
hace 26 semanas 4 días
hace 36 semanas 4 días