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

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

Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva)

Apresentações semelhantes


Apresentação em tema: "Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva)"— Transcrição da apresentação:

1

2 Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva) offspring (bob,pam). offspring (bob,tom). offspring (liz,tom). offspring (ann,bob). offspring (pat,bob). offspring (jim,pat). Aproximação 2 (introdução de uma regra) Para qualquer X e Y, X é descendente de Y se Y é ascendente de X. offspring (X,Y):- parent (Y,X). cabeça (conclusão) corpo (condição)

3 Programação Declarativa 3 Instância de uma regra (exemplo) Regra offspring (X,Y) :- parent (Y,X). Objectivo ?- offspring (tom,liz). Instância para X = tom e Y = liz offspring (tom,liz) :- parent (liz,tom) o objectivo offspring (tom,liz) é substituído pelo (sub) objectivo parent (liz,tom). Se parent(liz,tom) é verdadeiro então offspring(tom,liz) é verdadeiro.

4 Programação Declarativa 4 Conjunção de objectivos (exemplo) Quando no corpo da cláusula existe mais do que um objectivo. Para qualquer X e Y, X é avó de Y (predicado grandparent (X,Y)) se, existe Z, tal que X é ascendente de Z e Z é ascendente de Y. grandparent (X,Y) :- parent (X,Z), parent (Z,Y). Na instância grandparent(tom,pat) :- parent(tom,Z1), parent(Z1,pat) (X = tom, Y = pat e Z = Z1), o objectivo grandparent(tom,pat) é substituído pela conjunção dos objectivos parent(tom,Z1) e parent(Z1,pat). Seja Z1 = bob. Se parent (tom,bob) e parent (bob,pat) são verdadeiros, então grandparent (tom,pat) é verdadeiro.

5 Programação Declarativa 5 Mais um exemplo Para qualquer X e Y, X é irmã de Y, se X é do sexo feminino e, existe Z, tal que Z é ascendente de X e Y. sister(X,Y) :- female(X), parent(Z,X), parent(Z,Y). ? – sister(ann,pat). Yes ? – sister(X,pat). X = ann; X = pat; (pat é irmã de si própria!) no sister(X,Y) :- female(X), parent(Z,X), parent(Z,Y), difference(X,Y).

6 Programação Declarativa 6 ver progProl0 REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva) offspring(bob,pam). offspring(bob,tom). offspring(liz,tom). offspring(ann,bob). offspring(pat,bob). offspring(jim,pat). Aproximação 2 (introdução de uma regra) Para qualquer X e Y, X é descendente de Y, se Y é ascendente de X. offspring(X,Y):-parent(Y,X). cabeça (conclusão) corpo (condição) Instância de uma regra (exemplo) Regra offspring(X,Y) :- parent(Y,X). Instância da regra (para X = tom e Y = liz) offspring (tom,liz) :  parent (liz,tom) Objectivo ?  offspring(tom,liz). Dada a instância offspring (tom,liz) :  parent (liz,tom), o objectivo offspring (tom,liz) é substituído pelo (sub) objectivo parent (liz,tom). Se parent (liz,tom) é verdadeira então offspring (tom,liz) é verdadeira.

7 Programação Declarativa 7 Conjunção de objectivos (exemplo) Suponhamos que o corpo de uma cláusula é uma conjunção de objectivos (as questões, também, podem ser introduzidas como conjunções de objectivos). Para qualquer X e Y, X é avó de Y (predicado grandparent (X,Y)) se, existe Z, tal que X é ascendente de Z e Z é ascendente de Y. grandparent(X,Y) :- parent(X,Z),parent(Z,Y). Na instância grandparent (tom,pat) :- parent (tom,Z1), parent (Z1,pat) da regra acima, para X = tom, Y = pat e Z = Z1, o objectivo grandparent (tom,pat) é substituído pela conjunção dos objectivos parent (tom,Z1) e parent (Z1,pat). Seja Z1 = bob. Se parent (tom,bob) e parent (bob,pat) são verdadeiras, então grandparent (tom,pat) é verdadeira. Exemplo Para qualquer X e Y, X é irmã de Y, se X é do sexo feminino e, existe Z, tal que Z é ascendente de X e Y. sister(X,Y) :- female(X), parent(Z,X), parent(Z,Y). ? – sister(ann,pat). Yes ? – sister(X,pat). X = ann; X = pat; (pat é irmã de si própria!) no Refinamento sister(X,Y) :- female(X), parent(Z,X), parent(Z,Y), different(X,Y).

8 Programação Declarativa 8 Programa (completo) % procedimento parent parent(pam,bob). parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim). % procedimento female female(pam). female(liz). female(ann). female(pat). % procedimento male male(tom). male(bob). male(jim). % procedimento offspring offspring(Y,X) :- parent(X,Y). % procedimento mother mother(X,Y) :- parent(X,Y),female(X) % procedimento grandparent grandparent(X,Z) :- parent(X,Y), parent(Y,Z). % procedimento sister sister(X,Y) :- parent(Z,X), parent(Z,Y), female(X), different(X,Y) Observações % (/* comentário */) assinala uma (respectivamente, parte de uma) linha de comentários num programa Prolog. Um procedimento é um conjunto de cláusulas que define uma relação (e.g. o conjunto constituído pela cláusula mother(X,Y) :  parent(X,Y),female(X) define o procedimento mother).


Carregar ppt "Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva)"

Apresentações semelhantes


Anúncios Google