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

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

2. A Linguagem Prolog. Introdução à Programação Prolog 2 A Cláusula Prolog a :- b 1, b 2... b i ; b j... b n. Cabeça, Conclusão, Consequente. Corpo, Condição,

Apresentações semelhantes


Apresentação em tema: "2. A Linguagem Prolog. Introdução à Programação Prolog 2 A Cláusula Prolog a :- b 1, b 2... b i ; b j... b n. Cabeça, Conclusão, Consequente. Corpo, Condição,"— Transcrição da apresentação:

1 2. A Linguagem Prolog

2 Introdução à Programação Prolog 2 A Cláusula Prolog a :- b 1, b 2... b i ; b j... b n. Cabeça, Conclusão, Consequente. Corpo, Condição, Antecedente. sese ee ouou

3 Operadores Prolog Linguagem Natural Cálculo de Predicados Programas Prolog E, OU ; SE :- NÃO not Introdução à Programação Prolog 3

4 4 Fatos Seja a árvore genealógica mostrada abaixo... MariaJoão JoséAna Júlia Íris Jorge que pode ser representada pelo seguinte programa Prolog: progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). Este programa representa a relação progenitor/2, na forma de um predicado, que contém 6 cláusulas, que são todas fatos.

5 Introdução à Programação Prolog 5 Consultas O programa pode ser pensado como uma tabela em uma BD. progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). No caso de um programa constituído unicamente de fatos, a semântica é exatamente a mesma de uma BD relacional... que pode ser consultada de várias maneiras: ?- progenitor(joão, ana). true ?- progenitor(joão, jorge). fail ?- progenitor(joão, X). X=josé; X=ana. fail ?- progenitor(X,Y). X=maria, Y=josé; X=joão, Y=josé;... X=íris, Y=jorge. fail

6 Introdução à Programação Prolog 6 Ampliando a Base de Fatos O programa pode ser ampliado acrescentando-se novos fatos que inclusive podem estabelecer novas relações. No exemplo ao lado acrescentou-se ao programa original as relações masculino/1 e feminino/1. Estas relações, que possuem aridade 1, podem ser pensadas como sendo atributos dos objetos a que se aplicam. progenitor(maria, josé). progenitor(joão, josé). progenitor(joão, ana). progenitor(josé, júlia). progenitor(josé, íris). progenitor(íris, jorge). masculino(joão). masculino(josé). masculino(jorge). feminino(maria). feminino(ana). feminino(júlia). feminino(íris).

7 Introdução à Programação Prolog 7 Regras As relações pai/2 e mãe/2 podem agora ser definidas da seguinte maneira: X é pai de Y se X é progenitor de Y e X é masculino. X é mãe de Y se X é progenitor de Y e X é feminino. Em Prolog: pai(X,Y) :- progenitor(X,Y), masculino(X). mãe(X,Y) :- progenitor(X,Y), feminino(X).

8 Introdução à Programação Prolog 8 Mais Regras As relações irmão/2 e irmã/2 podem agora ser definidas da seguinte maneira: X é irmão de Y se Z é progenitor de X e Z é progenitor de Y e X é masculino. X é irmã de Y se... Em Prolog: irmão(X,Y) :- progenitor(Z,X), progenitor(Z,Y), masculino(X). irmã(X,Y) :-... mas, esta regra tem um problema. (qual?)

9 Introdução à Programação Prolog 9 Exercício Acrescentar ao programa da árvore genealógica as seguintes relações (em 10 minutos): avô/2 tia/2 prima/2

10 Introdução à Programação Prolog 10 Representação Textual Considere o seguinte texto: João nasceu em Pelotas e Jean nasceu em Paris. Paris fica na França, enquanto que Pelotas fica no Rio Grande do Sul. Mas só é gaúcho quem nasceu no Rio Grande do Sul, tchê. Ao lado a codificação em Prolog: nasceu(joão,pelotas). nasceu(jean,paris). fica(paris,frança). fica(pelotas,rs). gaúcho(X):- nasceu(X,Y), fica(Y,rs). ?- gaúcho(X). X=joão; no

11 Introdução à Programação Prolog 11 Predicados Recursivos Seja, por exemplo, a relação antepassado/2: Uma tentativa de codificar esta relação em Prolog seria: antepassado(X,Y) :- progenitor(X,Y). antepassado(X,Y) :- progenitor(X,Z), progenitor(Z,Y).... (indefinidamente). Claramente, uma má solução. (Por que?) MariaJoão JúliaÍris Jorge progenitor (a) (b) antepassado direto antepassado indireto

12 Introdução à Programação Prolog 12 Predicados Recursivos Uma representação mais geral: Uma codificação recursiva para antepassado/2: antepassado(X,Y) :- progenitor(X,Y). antepassado(X,Y) :- progenitor(X,Z), antepassado(Z,Y).... (só!). Por que esta solução é melhor que a anterior? Y João Íris antepassado progenitor...

13 Introdução à Programação Prolog 13 Caminhos em Grafos Seja o grafo direcionado abaixo: conecta(a,b,3). conecta(a,c,4).... conecta(e,f,2). caminho(X,Y,K):- conecta(X,Y,K). caminho(X,Y,K):- conecta(X,Z,K1), caminho(Z,Y,K2), K is K1+K2. ?- caminho(X,Y,K). X=a, Y=b, K=3;... no A B C D E F E as relações conecta(X,Y,K) e caminho(X,Y,K), onde X e Y são nodos e K é o custo entre eles. Ao lado, em Prolog: 5

14 Introdução à Programação Prolog 14 Predicados Recursivos Referenciam a si próprios. Possuem, no mínimo, duas cláusulas, uma recursiva e a outra não. A cláusula não-recursiva denomina-se cláusula básica. As cláusulas básicas podem ser regras ou fatos. As cláusulas recursivas são sempre regras. O predicado recursivo somente é bem sucedido na cláusula básica. A cláusula recursiva nunca é bem sucedida.

15 Introdução à Programação Prolog 15 Programa Prolog aridade Predicados são conjuntos de cláusulas com o mesmo nome e aridade (no. de argumentos) Programa PROLOG predicado Cada predicado denota uma relação Conjunto de Predicados Fatos: Verdades incondicionais Regras: Verdades condicionais A A B, C, D... A é verdadeiro A é verdadeiro se B, C, D... são todos verdadeiros Fato: pai(joão, josé). Regra: pai(X, Y) :- masculino(X), progenitor(X, Y). É executado a partir de uma consulta ou cláusula objetivo ( A) Conjunto de axiomas Teorema a ser provado Consulta: ?-pai(joão, X). Sistema PROLOG: Regras de Inferência Método de Dedução SLD sim/não instanciações Resultado: sim/não ou instanciações das variáveis da consulta que permitem prová-la verdadeira no contexto do programa. conjunto de relações em notação clausal O domínio do problema é representado como um conjunto de relações em notação clausal Um predicado é verdadeiro se pelo menos uma das suas cláusulas é verdadeira. Variáveis começam com maiúsculas e constantes com minúsculas Problema do Mundo Real

16 Introdução à Programação Prolog 16 Tema para Casa Criar a base de fatos da sua árvore genealógica (inicialmente só com as relações progenitor/2, masculino/1 e feminino/1). Enriquecer com outras relações de parentesco além das apresentadas (por exemplo: bisavó/2, cunhado/2,... etc). Testar! (por exemplo: quem é tio de X?) Sugestão: Pedir a ajuda das pessoas mais velhas da família.


Carregar ppt "2. A Linguagem Prolog. Introdução à Programação Prolog 2 A Cláusula Prolog a :- b 1, b 2... b i ; b j... b n. Cabeça, Conclusão, Consequente. Corpo, Condição,"

Apresentações semelhantes


Anúncios Google