Introduo Linguagem Prolog Prof Fabrcio Enembreck PPGIA Programa
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 • Grafos em Prolog
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)
Da Notação de Kowalski para um programa Prolog Fato ou Cláusula Unitária Notação de Kowalski Programa Prolog 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) 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) ? - depende(a, e). Questionamento Regra
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’
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
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
Programa Prolog (cont. ) Parâmetros • Estrutura de um fato gosta(joao, maria). Nome do predicado • Estrutura de uma regra gosta(joao, X) : gosta(X, vinho), gosta(X, futebol). Conjunção
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
Introdução ao SWI-Prolog • Utilização do Emacs para edição de programas 1. ? - emacs. 2. Editar e salvar o programa: gosta(julio, peixe). gosta(julio, maria). gosta(maria, livro). gosta(joao, livro). 3. Compilar o arquivo 4. Realizar os questionamentos Quem gosta de livro? Quem gosta de livro e chocolate? Quem gosta de livro ou chocolate?
Introdução ao SWI-Prolog (cont. ) • Operadores relacionais – – – – X=Y X = Y X<Y X>Y X =< Y X >= Y X =: = Y X == Y X e Y são iguais; X e Y são diferentes; X é menor que Y; X é maior que Y; X é menor ou igual a Y; X é maior ou igual a Y. X e Y são iguais (p/ números); X e Y são diferentes (p/ números).
Introdução ao SWI-Prolog (cont. ) • Operadores aritméticos – – – X+Y X–Y X*Y X/Y X mod Y soma de X e Y; diferença de X e Y; multiplicação de X por Y; divisão de X por 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
Matching e Substituição depende(a, e) 3 chama(a, e) Θ={x/a, y/e} 4 usa(a, e) 5 chama(a, z), depende(z, e) 1 Θ={z/b} depende(b, e) Θ={x/b, y/e} 4 3 5 Exemplo: chama(b, e) 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) usa(b, e) 2 chama(b, z), depende(z, e) □ x, y e z são variáveis; “a”, “b” e “e” são átomos
Matching e Substituição • (cont. ) O matching entre duas estruturas X e Y podem ocorrer em 4 situações 1. X é uma variável desinstanciada e Y está instanciado com um valor qualquer. Ex: ? - X = a. 2. X e Y estão instanciados com o mesmo valor. Ex. : ? - casa = casa.
Matching e Substituição (cont. ) 3. X e Y não estão instanciados. Neste caso X e Y passam a ser a mesma variável. Ex: ? - X = Y. 4. 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).
Verificando o matching entre elementos • Verifique o resultado dos matchings ? - pilota(A, londres) = pilota(londres, paris). ? - ponto(X, Y, Z) = ponto(X 1, Y 1, Z 1). ? - 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))
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)
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) pai(X, Y) X é casado c/ 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) c) tio(X, Y) d) avo(X, Y) f) primo(X, Y) g) cunhado(X, Y)
Exercícios (cont. ) 5 - Dada a base de fatos a seguir governou(deodoro_da_fonseca, 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
- Slides: 19