1 / 19

Introdução à Linguagem Prolog

Introdução à Linguagem Prolog. Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada. Conteúdo do Curso. Introdução à Lógica e à Programação Lógica Introdução ao Prolog e ao SWI-Prolog Matching e Backtraking Múltiplas soluções Listas e predicados recursivos

Download Presentation

Introdução à Linguagem Prolog

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução à Linguagem Prolog Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada

  2. Conteúdo do Curso • Introdução à Lógica e à Programação Lógica • Introdução ao Prolog e ao SWI-Prolog • Matching e Backtraking • Múltiplas soluções • Listas e predicados recursivos • Grafos em Prolog

  3. Introdução ao Prolog • Características • Provador de teoremas (Verdade ou Falso) • Linguagem declarativa • Linguagem não tipada • Linguagem é interpretada • Não determinístico • Diferente de programação procedimental (definição lógica dos problemas) • Não existe variáveis globais • Muito usado em IA (rápida prototipação)

  4. Da Notação de Kowalski para um programa Prolog Fato ou Cláusula Unitária chama(a,b)  usa(b,e)  depende(x,y)  chama(x,y) depende(x,y)  usa(x,y) depende(x,y)  chama(x,z), depende(z,y)  depende(a,e) Programa Prolog Notação de Kowalski Regra chama(a,b). usa(b,e). depende(X,Y) :- chama(X,Y). depende(X,Y) :- usa(X,Y). depende(X,Y) :- chama(X,Z), depende(Z,Y). ?- depende(a,e). Questionamento

  5. Elementos da Linguagem - Átomos • Definição: cadeias compostas pelos seguintes caracteres: • Letras Maiúsculas: A,..., Z • Letras Minúsculas: a,..., z • Dígitos: 0, 1,..., 9 • Caracteres especiais: *, +, _, -, >, <, =, :, , ~ • Composição de Átomos: • Cadeias começando com letras minúsculas. Ex.: x_y, maria, curso_de_IA • Cadeias de caracteres especiais. Ex.: <---->, ::= • Cadeias de caracteres entre apóstrofos. Ex.: ‘Maria’, ‘casa branca’, ‘a’

  6. Elementos da Linguagem (cont.) • Números: 1, 2.45, -20 • Variáveis: são cadeias de letras, dígitos e o caractere “_”. • Ex.: X, Mapa_da_mina, _nome

  7. Programa Prolog • Declaração de fatos (cláusulas unitárias) • Declaração de regras • Interrogação a respeito desses elementos Fatos e regras denotam relações entre objetos

  8. Programa Prolog (cont.) Parâmetros • Estrutura de um fato gosta(joao, maria). • Estrutura de uma regra gosta(joao, X) :- gosta(X, vinho), gosta(X, futebol). Nome do predicado Conjunção

  9. Questionamentos • Dada a base de fatos: gosta(julio,peixe). gosta(julio,maria). gosta(maria,livro). gosta(joao,livro). Quem gosta de livro? ?- gosta(X, livro). Quem gosta de livro e chocolate? ?- gosta(X, livro), gosta(X, chocolate). Quem gosta de livro ou chocolate? ?- gosta(X, livro); gosta(X, chocolate). Disjunção

  10. Introdução ao SWI-Prolog • Utilização do Emacs para edição de programas • ?- emacs. • Editar e salvar o programa: gosta(julio,peixe). gosta(julio,maria). gosta(maria,livro). gosta(joao,livro). • Compilar o arquivo • Realizar os questionamentos Quem gosta de livro? Quem gosta de livro e chocolate? Quem gosta de livro ou chocolate?

  11. Introdução ao SWI-Prolog (cont.) • Operadores relacionais • X = Y X e Y são iguais; • X \= Y X e Y são diferentes; • X < Y X é menor que Y; • X > Y X é maior que Y; • X =< Y X é menor ou igual a Y; • X >= Y X é maior ou igual a Y. • X =:= Y X e Y são iguais (p/ números); • X =\= Y X e Y são diferentes (p/ números).

  12. Introdução ao SWI-Prolog (cont.) • Operadores aritméticos • X+Y soma de X e Y; • X – Y diferença de X e Y; • X * Y multiplicação de X por Y; • X / Y divisão de X por Y; • X mod Y resto da divisão de X por Y. • Atribuição de valores numéricos “is”: ?- X is 10 + 2. • Negação de predicados: \+ não

  13.  depende(a,e) Θ={x/a,y/e} 3 5 4  chama(a,e)  usa(a,e) • chama(a,z), depende(z,e) 1 Θ={z/b}  depende(b,e) 4 Θ={x/b,y/e} 3 5  chama(b,e)  usa(b,e) • chama(b,z), depende(z,e) 2 □ Matching e Substituição Exemplo: 1. chama(a,b)  2. usa(b,e)  3. depende(x,y)  chama(x,y) 4. depende(x,y)  usa(x,y) 5. depende(x,y)  chama(x,z), depende(z,y) 6.  depende(a,e) x, y e z são variáveis; “a”, “b” e “e” são átomos

  14. Matching e Substituição (cont.) • O matching entre duas estruturas X e Y podem ocorrer em 4 situações • X é uma variável desinstanciada e Y está instanciado com um valor qualquer. Ex: ?- X = a. • X e Y estão instanciados com o mesmo valor. Ex.: ?- casa = casa.

  15. Matching e Substituição (cont.) • X e Y não estão instanciados. Neste caso X e Y passam a ser a mesma variável. Ex: ?- X = Y. • X e Y são estruturas com mesmo nome, número de parâmetros e uma das condições anteriores ocorre para todos os seus parâmetros. Ex.: ?- anda(joao,bicicleta(caloi)) = anda(joao, X).

  16. Verificando o matching entre elementos • Verifique o resultado dos matchings ?- pilota(A, londres) = pilota(londres,paris). ?- ponto(X,Y,Z) = ponto(X1,Y1,Z1). ?- letra(G) = palavra(letra). ?- num(alpha) = alpha. ?- ‘caixa’ = caixa. ?- f(X,X) = f(a,b). ?- f(X,a(b,c)) = f(Z,a(Z,c))

  17. Exercícios 1- Implemente os seguintes programas Prolog • soma(X,Y,Z) (Z é o resultado da soma de X e Y) • maior(X,Y,Z) (Z é o maior entre X e Y) • menor(X,Y,Z) (Z é o menor entre X e Y) • par(X) (é verdade se X é par e falso se X é ímpar) • impar(X) (é verdade se X é ímpar e falso se X é par)

  18. Exercícios (cont.) 3- Declare uma base de fatos contendo várias cláusulas dos predicados a seguir relacionando pessoas da sua família: casado(X,Y) X é casado c/ Y pai(X, Y) X é pai de Y 4- A partir desses fatos crie os seguintes programas Prolog: a) mae(X,Y) e) avo_(X,Y) b) irmao(X,Y) f) primo(X,Y) c) tio(X,Y) g) cunhado(X,Y) d) avo(X,Y)

  19. Exercícios (cont.) 5- Dada a base de fatos a seguir governou(deodoro_da_fonseca,1891,1891). governou(floriano_peixoto,1891,1894). governou(prudente_de_moraes,1894,1898). governou(compos_sales,1898,1902). governou(rodrigues_alves,1902,1906). governou(afonso_pena,1906,1909). governou(nilo_pecanha,1909,1910). Escreva um programa Prolog chamado “presidente” que deve encontrar a(s) pessoa(s) que governavam o Brasil em um ano determinado. Ex. 1: ?- presidente(X, 1892). X = floriano_peixoto Ex. 2: ?- presidente(X, 1891). X = deodoro_da_fonseca ; X = floriano_peixoto ; no

More Related