domingo, 5 de janeiro de 2014

Prolog?


ultimo(X,[X]).
ultimo(X,[_|Cauda]) :- ultimo(X,Cauda).

primeiro(X,[X|_]).

tamanho(0,[]).
tamanho(T,[X|Y]) :- (tamanho(Z,Y),T is Z+1).


tamanhocauda(0,[]).
tamanhocauda(T,[X|Y]) :- tamanho_cauda(Q,[X|Y]), T is Q-1.

adicao(X,Y,Z) :-  Z is X+Y.



consecutivos(X,Y,[X|[Y|_]]).
consecutivos(X,Y,[_|Cauda]) :- consecutivos(X,Y,Cauda).

soma(0,[]).
soma(S,[X|Y]) :- (soma(Z,Y),S is Z+X).

enesimo(1,X,[X|_]).
enesimo(N,X,[_|Y]) :- enesimo(M,X,Y), N is M + 1.

pertence(X,[X|_]).
pertence(X,[_|Y]):-pertence(X,Y).

pertence2(X,[X|_]):-!.
pertence2(X,[_|Y]):-pertence2(X,Y).

%soma_esp(M,N,SOMA,Lista)= soma (M_ésimo + N_ésimo) elementos da lista e armazena em SOMA.
soma_esp(M,N,SOMA,Lista):-enesimo(M,X,Lista), enesimo(N,Y,Lista), SOMA is X+Y.

%soma_esp2(N,SOMA,Lista)= soma o N.ésimo elemento da lista com o seu consecutivo.
soma_esp2(N,SOMA,Lista):- M is N+1, enesimo(M,X,Lista), enesimo(N,Y,Lista), SOMA is X+Y.



soma_esp3([X|Y],Z) :- ultimo(A,[X|Y]),primeiro(B,[X|_]), Z is A+B.

soma_esp4(1,SOMA,[SOMA|_]).
soma_esp4(N,SOMA,LISTA) :-enesimo(N,X,LISTA), N1 is N-1 ,soma_esp4(N1,Y,LISTA), SOMA is X + Y.
Postar um comentário