Confira exemplos de códigos na linguagem de programação Prolog.
Abaixo você confere exemplos de códigos em Prolog para aprendizado de programação lógica. Você pode rodar o código abaixo copiando e colando em algum compilador de Prolog online, clicando aqui você encontra um.
nElementos([],0).
nElementos([_|L],S) :- nElementos(L,V), S is (V+1).
maior([A],A).
maior([X|L],M) :- maior(L,N),(N > X -> M=N;M=X).
soma([],0).
soma([X|L],S) :- soma(L,V), S is (V+X).
medio([],0).
medio(L,M) :- soma(L, S), nElementos(L, N), M is S/N.
inserirfim(X,[],[X]).
inserirfim(X,[A|Z],[A|Y]) :- inserirfim(X,Z,Y).
ultimo([A],A).
ultimo([_|X],U) :- ultimo(X,U).
adjacente(X,Y,[X,Y | _]).
adjacente(X,Y,[Z | L]) :- X \== Z, adjacente(X,Y,L).
gerar(A,A,[A]).
gerar(X,Y,[X | L]) :- S is X+1, gerar(S,Y,L).
concatenar([],L,L).
concatenar([X|L1],L2,[X|L3]) :- concatenar(L1,L2,L3).
reverter([],[]).
reverter([A|Z],L) :- reverter(Z,L2), concatenar(L2,[A],L).
incrementar([],[]).
incrementar([A|Z],[B|L]) :- incrementar(Z,L), B is A+1.
linearizar([A|[]],A).
linearizar([A|[B|L1]],L2) :- concatenar(A,B,C), linearizar([C|L1],L2).
anexar([], L, L).
anexar([X|L1], L2, [X|L3]) :- anexar(L1, L2, L3).
remover(_,[],[]).
remover(X, [X|T], NT) :- remover(X,T,NT).
remover(X, [Y|T], [Y|NT]) :- X \== Y, remover(X, T, NT).
rotacionar([],[]).
rotacionar([A|Z],L) :- anexar(Z,[A],L).
rotacionarn([],[]).
rotacionarn(X,Z,L) :- remover(X,Z,M), anexar(M,[X],L).
ordenar([],[]).
ordenar([A],[A]).
ordenar(X,L) :- maior(X,M), remover(M,X,N), ordenar(N,O), anexar(O,[M],L).
Você pode rodar os seguintes casos de testes abaixo, confira logo abaixo também o resultado do caso de teste:
?- nElementos([1,2,3], S).
S = 3
?- maior([4,5,2,3,1], M).
M = 5
?- medio([4,5,2,3,1], M).
M = 3
?- inserirfim(4, [1,2,3], L).
L = [1,2,3,4]
?- ultimo([1,2,3,4], U).
U = 4
?- adjacente(3, 4, [1,2,3,4,5,6]).
True
?- gerar(5,10,L).
L = [5,6,7,8,9,10]
?- reverter([1,2,3], L).
L = [3,2,1]
?- incrementar([5,6,7,8], L).
L = [6,7,8,9]
?- linearizar([[1,2,3], [4,5], [6], [7,8]], L).
L = [1,2,3,4,5,6,7,8]
?- anexar([1,2,3], [4,5,6], L).
L = [1,2,3,4,5,6]
?- remover(3, [1,3,2,3,4], L).
L = [1,2,4]
?- rotacionar([1,2,3,4,5], L).
L = [2,3,4,5,1].
?- rotacionarn(2, [1,2,3,4,5], L).
L = [1, 3, 4, 5, 2]
?- ordenar([3, 1, 2], L).
L = [1,2,3]
COMENTÁRIOS