A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

5. Processamento de Listas. Introdução à Programação Prolog2 Representação de Listas [a, b, c, d].. (Cabeça, Corpo).. (a,. (b,. (c,. (d,. ([])))). [a]

Apresentações semelhantes


Apresentação em tema: "5. Processamento de Listas. Introdução à Programação Prolog2 Representação de Listas [a, b, c, d].. (Cabeça, Corpo).. (a,. (b,. (c,. (d,. ([])))). [a]"— Transcrição da apresentação:

1 5. Processamento de Listas

2 Introdução à Programação Prolog2 Representação de Listas [a, b, c, d].. (Cabeça, Corpo).. (a,. (b,. (c,. (d,. ([])))). [a] =. (a, []). [Cabeça | Corpo] brasil uruguai argentina paraguai [ ] [brasil, uruguai, argentina, paraguai] Qualquer termo Prolog Sempre uma Lista

3 Introdução à Programação Prolog3 Exemplos com Listas [X | Y] = [X | [Y | Z]] = [a, b, c, d] [X, Y, Z] \= [a, b, c, d] [a, b, c] = [a | [b | [c]]] = [a | [b, c]] = [a, b | [c]] = [a, b, c | []] As consultas abaixo também são elucidativas: ?-[X | Y] = [a, b, c]. X=a, Y=[b, c] ?-[X, Y, Z] = [a, b, c, d]. no ?-[X | [Y | Z]] = [a, b, c, d]. X=a, Y=b, Z=[c, d]

4 Introdução à Programação Prolog4 Construção de Listas lista([]).% Uma lista, ou é vazia ou é lista([_|_]).% formada por uma cabeça e um corpo. cons(X, Y, [X|Y]).% Constrói (ou decompõe) uma lista. ?- cons(a, [b, c], X).% Observar que o corpo de uma lista X = [a, b, c]% é sempre uma lista. ?- cons(X, Y, [a, b, c]).% A lista dada [a, b, c] se X = a, Y = [b, c]% decompõe em cabeça e corpo. ?- cons(a, X, [a, b, c]).% Prolog permite também resultados X = [b, c]% implícitos, como este.

5 Introdução à Programação Prolog5 O Predicado membro/2 membro(X, [X|_]). % X é membro de uma lista se X é a membro(X, [_|Y]):-% cabeça da lista. Ou então se X é membro(X,Y).% membro do corpo da lista. ?- membro(c, [a, b, c]). yes ?- membro(X, [a, b, c]). X = a; X = b; X = c; no ?- membro(b, [a, [b, c]]). no

6 Introdução à Programação Prolog6 Concatenação de Listas conc([], L, L). conc([X | L1], L2, [X | L3]):- conc(L1, L2, L3).

7 Introdução à Programação Prolog7 Exemplos com conc/3 ?- conc([a, b, c], [1, 2, 3], L). L = [a, b, c, 1, 2, 3] ?- conc([a, [b, c], d], [a, [], b], L). L = [a, [b, c], d, a, [], b] ?- conc([a, b], [c | R], L). L = [a, b, c | R] ?- conc(L1, L2, [a, b, c]). L1 = [], L2 = [a, b, c]; L1 = [a], L2 = [b, c]; L1 = [a, b], L2=[c]; L1 = [a, b, c], L2=[]; no

8 Introdução à Programação Prolog8 Mais Exemplos com conc/3 ?- conc(_, [X, g, Y | _], [a, b, c, d, e, f, g, h]). X = f, Y = h; no ?- conc(Trab, [sab | _], [seg, ter, qua, qui, sex, sab, dom]). Trab = [seg, ter, qua, qui, sex]; no ?- M=[jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez], conc(Antes, [mai | Depois], M). Antes = [jan, fev, mar, abr], Depois = [jun, jul, ago, set, out, nov, dez]; no

9 Introdução à Programação Prolog9 Outros Predicados com Listas membro1(X, L):- % membro/2 em função de conc/3. conc(_, [X|_], L). remover(X, [X|C], C).% Pode-se remover um elemento X de uma lista onde remover(X, [Y|C], [Y|D]):-% X é a cabeça. Se X não é a cabeça da lista, então remover(X, C, D). % X deve ser removido do corpo da lista. inserir(X, L, L1):-% inserir/3 em função de remover/3. remover(X, L1, L).% A inserção é sempre feita na cabeça de L. inverter([], []).% A inversão de uma lista vazia é a própria lista vazia. inverter([X|Y], Z):-% A inversão de uma lista não-vazia é a inversão de inverter(Y, Y1), % seu corpo e a concatenação deste corpo invertido conc(Y1, [X], Z). % com a cabeça da lista original.

10 Introdução à Programação Prolog10 Mais Predicados com Listas sublista(S, L):- % S é sublista de L se L pode ser decomposta em duas conc(_, L1, L), % listas, uma das quais é L1, e L1 pode ser decomposta conc(S, _, L1). % em outras duas listas, uma das quais é S. tamanho([], 0). % O tamanho de uma lista vazia é zero. O tamanho de tamanho([_|R], N):-% uma lista não-vazia é obtido acrescentando-se uma tamanho(R, N1), % unidade ao tamanho de seu corpo. N is N enesimo(1, X, [X | _]). % Este predicado devolve em X o enésimo elemento de enesimo(N, X, [_ | Y]):- % uma lista. Pode ser usado no sentido inverso para enesimo(M, X, Y), % informar a posição de um determinado elemento N is M + 1. % na lista. soma([], 0). % A soma dos elementos de uma lista de números é soma([X | Y], S):- % obtida somando o valor da cabeça á soma dos soma(Y, R), % elementos do corpo da lista. S is R + X.

11 Introdução à Programação Prolog11 Conjuntos como Listas Conjuntos e operações sobre conjuntos podem ser representados como listas em Prolog, considerando-se que: 1.Listas possuem uma ordenação implícita que não existe em conjuntos, e 2.Listas podem apresentar elementos repetidos, o que não acontece nos conjuntos. conjunto([], []):- !. conjunto([X|C1], [X|C2]):- not member(X, C1), !, conjunto(C1, C2). conjunto([_|C1], C2):- conjunto(C1, C2).

12 Introdução à Programação Prolog12 Operações sobre Conjuntos conjunto([], []):- !. conjunto([X|C1], [X|C2]):- not member(X, C1), !, conjunto(C1, C2). conjunto([_|C1], C2):- conjunto(C1, C2). união([], C, C):- !. união([X|C1], C2, C3):- member(X, C2), !, união(C1, C2, C3). união([X|C1], C2, [X|C3]):- união(C1, C2, C3). intersec([], _, []):- !. intersec([X|C1], C2, [X|C3]):- member(X, C2), !, intersec(C1, C2, C3). intersec([_|C1], C2, C3):- intersec(C1, C2, C3). difer([], _, []):-!. difer([X|C1], C2, [X|C3]):- not member(X, C2), !, difer(C1, C2, C3). difer([_|C1], C2, C3):- difer(C1, C2, C3).

13 Introdução à Programação Prolog13 Quicksort em Prolog quick([X|Y], Z):- % Classifica uma lista [X|Y] resultando em Z se, part(Y, X, Peqs, Grds),% usando X como pivô, particiona Y em Peqs e Grds e quick(Peqs, P), % classifica Peqs resultando em P e quick(Grds, G), % classifica Grds resultando em G e append(P, [X|G], Z). % append/3 é o mesmo predicado conc/3 no SWI-Prolog. quick([ ], [ ]). % Classifica [ ] para si própria (caso básico). % part([X|XX], Y, [X|P], G):- % Por exemplo: X=Y, part(XX, Y, P, G).% yes part([], _, [], []). % ?-


Carregar ppt "5. Processamento de Listas. Introdução à Programação Prolog2 Representação de Listas [a, b, c, d].. (Cabeça, Corpo).. (a,. (b,. (c,. (d,. ([])))). [a]"

Apresentações semelhantes


Anúncios Google