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

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

2. A Linguagem Prolog.

Apresentações semelhantes


Apresentação em tema: "2. A Linguagem Prolog."— Transcrição da apresentação:

1 2. A Linguagem Prolog

2 A Cláusula Prolog a :- b1, b2... bi; bj... bn. “se” “e” “ou” Corpo,
Condição, Antecedente. Cabeça, Conclusão, Consequente. Introdução à Programação Prolog

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

4 Fatos Seja a árvore genealógica mostrada abaixo...
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. Maria João José Ana Júlia Íris Jorge 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 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). 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) :- feminino(X). 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?) 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 Introdução à Programação Prolog

10 Representação Textual
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 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: 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). progenitor(X,Z), progenitor(Z,Y). ... (indefinidamente). Claramente, uma má solução. (Por que?) Maria João Júlia Íris Jorge progenitor (a) (b) antepassado direto antepassado indireto 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). progenitor(X,Z), antepassado(Z,Y). ... (só!). Por que esta solução é melhor que a anterior? João progenitor Íris antepassado ... antepassado Y 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). 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 3 4 2 5 1 5 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: 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. Introdução à Programação Prolog

15 Programa Prolog Problema do Mundo Real
Predicados são conjuntos de cláusulas com o mesmo nome e aridade (no. de argumentos) Programa PROLOG 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 Resultado: sim/não ou instanciações das variáveis da consulta que permitem prová-la verdadeira no contexto do programa. 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 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. Introdução à Programação Prolog


Carregar ppt "2. A Linguagem Prolog."

Apresentações semelhantes


Anúncios Google