Skip to content

Instantly share code, notes, and snippets.

@tonussi
Forked from senhorinha/lista.pro
Created September 25, 2013 16:48
Show Gist options
  • Save tonussi/6702513 to your computer and use it in GitHub Desktop.
Save tonussi/6702513 to your computer and use it in GitHub Desktop.
/* 01 =====================
* Predicado: primeiro(L,P)
* Definição: L é uma lista e P é o primeiro dado de L.
*/
primeiro([P|_],P).
/* 02 ====================
* Predicado: segundo(L,S)
* Definição: L é uma lista e S é o segundo dado de L.
*/
segundo([_,S|_],S).
/* 03 ===================
* Predicado: ultimo(L,U)
* Definição: L é uma lista e U é o último dado de L.
*/
ultimo([U],U).
ultimo([_,S | R], U) :- ultimo([S|R],U).
/* 04 ======================
* Predicado: penultimo(L,P)
* Definição: L é uma lista e P é o penúltimo de L.
*/
penultimo([Pe,_], Pe).
penultimo([_,S,T|R],Pe) :- penultimo([S,T|R],Pe).
/* 05 ====================
* Predicado: tamanho(L,T)
* Definição: L é uma lista e T é o número de dados de L.
*/
tamanho([],0).
tamanho([_|R],T) :- tamanho([R],TR),
T is TR + 1.
/* 06 =====================
* Predicado: pertence(D,L)
* Definição: L é uma lista e D é um dos dados de L
*/
pertence(D,[D | _]).
pertence(D,[P|T]) :- D \= P, pertence(D,T).
/* 07 ========================
* Predicado: posicao(D,L,Pos)
* Definição: L é uma lista e Pos é a posição (iniciando com 1)
* do dado D na lista L. Pos = 0 caso dado não esteja em L.
*/
posicao(D,[],0).
posicao(D,[P|_],1) :- D = P.
posica(D,[P|T],Pos) :- D \= P, posicao(D,T,PosAux),
Pos is PosAux + 1.
/* 08 ==============================
* Predicado: removidoPrimeiro(L,LR)
* Definição: L é uma lista e LR é uma lista com os mesmos dados de L
* menos o primeiro.
*/
removidoPrimeiro([P|H],H).
/* 09 ============================
* Predicado: removidoUltimo(L,LR)
* Definição: L é uma lista e LR é uma lista com os mesmos dados de L
* menos o último.
*/
removidoUltimo([U],[]).
removidoUltimo([P|T1], [P|T2]) :- removidoUltimo(T1,T2).
/* 10 =================================
* Predicado: substituidoUltimo(D,L,LM)
* Definição: L é uma lista e LM é uma lista com os mesmos dados de L
* com exceção do último que é D.
*/
substituiUltimo(D,[U],[D]).
substituiUltimo(D,[P|T1], [P|T2]) :- substituiUltimo(D,T1,T2).
/* 11 ==================================
* Predicado: inseridoNoInicio(D, L, LM)
* Definição: D é um dado, L é uma lista e LM é a lista L mais o dado D no início.
*/
inseridoNoInicio(D,L,[D|L]).
/* 12 =================================
* Predicado: inseridoNoFinal(D, L, LM)
* Definição: D é um dado, L é uma lista e LM é a lista L mais o dado D no final.
*/
inseridoNoFinal(D,[],[D]).
inseridoNoFinal(D,[P|T],[P|T2]) :- inseridoNoFinal(D,T,T2).
/* 13 ====================================
* Predicado: inseridoNaPos(D, Pos, L, LM)
* Definição: D é um dado, Pos é a posição onde D deve ser inserido na lista L
* e LM é a lista L mais o dado D na posição Pos.
*/
inseridoNaPos(D,1, L,[D|L]).
inseridoNaPos(D,Pos,[P|T],[P|T2]) :- inseridoNaPos(D,PosAux,T,T2),
Pos is PosAux + 1.
/* 14 =====================================
* Predicado: removidoDaPos(L, Pos, D, LM)
* Definição: L é uma lista, Pos é a posição do dado a ser removido,
* D é o dado removido e LM é a lista L sem o dado removido.
*/
removidoDaPos(P,1,[P|R],R).
removidoDaPos(D,Pos,[P|T1],[P|T2]) :- Pos > 1, removidoDaPos(D,PosAux,T1,T2),
Pos is PosAux + 1.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment