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

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

Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da.

Apresentações semelhantes


Apresentação em tema: "Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da."— Transcrição da apresentação:

1 tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da expressão E1 é idêntica à avaliação da expressão E2. E1 =\= E2 é verdadeiro se a avaliação da expressão E1 não é idêntica à avaliação da expressão E2. T1 == T2 é verdadeiro se o termo T1 tem a mesma estrutura e todos os subtermos idênticos ao termo T2. T1 \== T2 é verdadeiro se o termo T1 não tem a mesma estrutura e/ou todos os subtermos idênticos ao termo T2. Exemplos ? f(a,b) == f(a,b). yes ? f(a,b) == f(a,X). no ? f(a,X) == f(a,Y). no ? X \== Y. yes ? t(X,f(a,Y)) == t(X,f(a,Y)). yes

2 Manipulação de bases de dados Uma base de dados relacional é uma especificação de conjunto de relações. Um programa em PROLOG é um tipo de base de dados relacional onde a especificação de relações está parcialmente explícita através dos factos e parcialmente implícita através das regras. Existem predicados pré-definidos que permitem actualizar a base de dados (através da adição de novas cláusulas ou remoção de cláusulas existentes) durante a execução de um programa PROLOG.

3 Procedimentos Pré-Definidos em PROLOG PROCEDIMENTO assert assert(C) adiciona a cláusula C à base de dados (activa). PROCEDIMENTO asserta asserta(C) adiciona a cláusula C ao início da base de dados (activa). Uma aplicação do procedimento asserta é guardar objectivos que foram previamente computados. PROCEDIMENTO assertz assertz(C) adiciona a cláusula C ao fim da base de dados (activa). Existe uma relação entre o procedimento consult e assertz: podemos ler um ficheiro (procedimento consult) através da leitura cláusula a cláusula e introduzindo cada cláusula lida através de assertz na base de dados. PROCEDIMENTO retract retract(C) remove a cláusula C da base de dados (activa).

4 Procedimentos Pré-Definidos em PROLOG Exemplos ? assert(p(a)),assertz(p(b)),asserta(p(c)). yes ? p(X). X = c; X = a; X = b; no ?- retract(p(a)). yes ? p(X). X = c; X = b; no

5 PROCEDIMENTO bagof Exemplos age(peter,7). age(ann,5). age(pat,8). age(tom,5). ? bagof(Child,age(Child,5),List). List = [ann,tom]; no ? bagof(Child,age(Child,Age),List). Age = 7 List = [peter]; Age = 8 List = [pat]; Age = 5 List = [ann,tom]; no ? bagof(Child,Age^age(Child,Age),List). List = [peter,ann,pat,tom]; no bagof(+Template, +Goal, -Bag) Unify Bag with the alternatives of Template, if Goal has free variables besides the one sharing with Template bagof will backtrack over the alternatives of these free variables, unifying Bag with the corresponding alternatives of Template. The construct +Var^Goal tells bagof not to bind Var in Goal. bagof/3 fails if Goal has no solutions. bagof(X,P,L) é verdadeiro se a lista L contém todo o objecto X que satisfaz o objectivo P.

6 PROCEDIMENTO setof Setof(X,P,L) é verdadeiro se a lista L (ordenada, por ordem alfabética ou por ordem crescente, no caso dos números, e sem elementos repetidos) contém todo o objecto X que satisfaz o objectivo P. Exemplos ? setof(Child,Age^age(Child,Age),ChildList), setof(Age,Child^age(Child,Age),AgeList). ChildList = [ann,pat,peter,tom] AgeList = [5,7,8]; No ? setof(Age/Child,age(Child,Age),List). List = [5/ann,5/tom,7/peter,8/pat]; No ?- setof(Child/Age,age(Child,Age),List). List = [ann/5, pat/8, peter/7, tom/5] ; No setof(+Template, +Goal, -Set) Equivalent to bagof/3, but sorts the result using sort/2 to get a sorted list of alternatives without duplicates.

7 PROCEDIMENTO findall findall(X,P,L) é verdadeiro se a lista L contém todo o objecto X que satisfaz o objectivo P. Exemplo ? findall(Child,age(Child,Age),List). List = [peter,ann,pat,tom]; No findall(+Template, +Goal, -Bag) Creates a list of the instantiations Template gets successively on backtracking over Goal and unifies the result with Bag. Succeeds with an empty list if Goal has no solutions. findall/3 is equivalent to bagof/3 with all free variables bound with the existence operator (^), except that bagof/3 fails when goal has no solutions.


Carregar ppt "Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da."

Apresentações semelhantes


Anúncios Google