Upload
vuongminh
View
214
Download
0
Embed Size (px)
Citation preview
PROLOG
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS
Elias Melgaço Chaves JúniorJonatas Luiz da Costa
Rafael Gonçalves Barreira
RoteiroLinguagens de Programação em Lógica: históricoTHIS IS PROLOG!!!!SWI-Prolog e write ('Hello world!!!')TermosFatosConsultaRegrasRecursividadeListas
Linguagens de Programação em lógica: Histórico
Estudos do raciocínio lógico de Boole (1815-1864) e de De Morgan (1806-1871) .Göttlob Frege (1879) cria a primeira versão do calculo de predicados.Em 1930 Kurt Gödel e Jacques Herbrand, em estudos separados, demonstraram que o mecanismo de prova do cálculo de predicados poderia oferecer uma prova formal de toda proposição logicamente verdadeira.Em 1939 a teoria estava O.K., faltava a pratica.
Histórico (Continuação)
Década de 50: cálculo de predicados começou a ser computacionalmente viável; Em 1958, a forma clausal começou a despertar o interesse dos estudiosos do assunto; Em 1960 Dag Prawitz propôs a "Unificação", um novo tipo de operação sobre os objetos do cálculo de predicados; Em 1972 Alain Colmerauer criou o "Prolog - Programmation en Logique", primeiro interpretador experimental de Prolog, na Universidade de Aix-Marseille
E agora o Prolog (continuação)
Implementações mais "praticas" foram desenvolvidas por Battani e Meloni (1973), Bruynooghe (1976) e, principalmente, David H. D. Warren, Luís Moniz Pereira e outros pesquisadores da Universidade de Edimburgo em 1977.
Pausa para apresentar o programa
Interpratador utilizado: SWI-Prolog
write('Hello World!!!')
Saída:
Hello World!!!true.
(WTF???)
Diferenças entre programação convencional e programação em lógica
PROGRAMAS CONVENCIONAIS PROGRAMAS EM LÓGICA
Processamento Numérico Processamento Simbolico
Soluções Algorítmicas Soluções Heurísticas
Estruturas de Controle e Conhecimento Integradas
Estruturas de Controle e Conhecimento Separadas
Dificil modificação Fácil modificação
Somente respostas totalmente corretas Incluem respostas parcialmente corretas
Somente a melhor solução possível Incluem todas as soluções possiveis
THIS IS PROLOG!!!!!!!!
Prolog é uma linguagem de programação em lógica
Algumas caracteristas do Prolog
Especificação são programasCapacidade dedutivaNão-DeterminismoReversibilidade das relações [ênfase aqui]3 formas de interpretação [muito legal também]Recursividade [mais legal ainda]
As Interpretações
Declarativa.As Cláusulas* são vistas como descrição do problema
ProcedimentalAs Cláusulas são vistas como entrada para um método
Operacional As Cláusulas são vistas como comandos para um procedimento de prova por refutação
* São as sentenças lógicas, e serão vistas mais adiante.
Termos no Prolog
Todos os objetos no Prolog são denominados termosAlguns termos:
átomoNumeroVariávelFatoRegra
Fatos*
São fatos!!!Representam um sentença verdadeira no PROLOG para o universo do problema em questão.Alguns fatos: Dunha está vivo, João conhece o Mário ....De forma logica porderia ser interpretado como:
Vd (onde: V=vivo e d=dunha)Cjm (onde: C=conhece, j=joão e m=mário)
e no prolog (tem que ser minúsculo mesmo*):vivo(dunha).*conhece(joão,mário).
* exemplo de clásula
Consultas
perguntas ao sistema PROLOGcomeça com "?-" (sem aspas)Infere resultados com base nas cláusulas existentes, verificando se a consulta é valida ou não
Momento alt + tabVariaveis:
Representam objetos genéricos e seu uso alterar a saída do processamento.Começam com a primeira letra maiúscula.
Mais um alt + tab
Regras* (P -> Q)
Relação causa-conseqüência, sendo que o conseqüente é informado antes do antecedente.considerando os fatos sobre paternidade** criar uma regra para a relação "avô"
* outro tipo de cláusula** calma que vai haver parte pratica
Regras (continuação)
Interpretação:"Uma pessoa é avô de outra, se a primeira for pai de um terceira pessoa, e essa terceira pessoa for pai da segunda"
Formalizando: para todo X e Y X é avô de Y se X for pai de Z e Z for pai de Y.
Regras (episodio 3: o retorno)
E o código em Prolog:
avo(X,Y) :- pai(X,Z), pai(Z,Y).
lá e de volta novamente: outro alt + tab
operadores logico:not() -> negação"," -> conjunção";" -> disjunção
Recursividade
Criar um termo (nome de todos os objetos do Prolog) que use o próprio termo na sua definição.Implementar a relação antepassado usando as definições de paternidade.
Momento alt + tab
"Para se entender a recursividade, tem que se entender a recursividade" #noRT
"Backtracking"
As consultas são organizadas em arvores de busca.Navegação em pré ordem.
Caminho executado pelo backtracking, um percurso em pré-ordem.
"Backtracking"
a, b, e, (b), f, g, (f), h, (f), i, (f), (b), (a), c, (a), donde o caminho em backtracking é representado entre parênteses
"Backtracking"
gosta(joão, jazz).gosta(joão, renata).gosta(joão, lasanha).gosta(renata, joão).gosta(renata, lasanha). Pergunta: ?-gosta(joão, X), gosta(renata, X).X = lasanha.
Listas
[umObjeto,outroObjeto,xis,dabliu]isso acima é uma lista em Prolog, um coleção delimitada por colchetes e separados por vírgula.como todo objeto Prolog é na verdade uma arvore.existe listas vazias representadas por "[]" (sem aspas)e existe listas não vaziasUma lista não vazia é composta de:
cabeça: qualquer objeto Prologcorpo: outra lista
representado por:(cabeça,corpo)
Representação da lista como árvore
Listas: a criação
listas vazias: [ ]lista com os valores: [a,b,c,d]formato cabeça-corpo: [H|B] , onde:
H é um elemento cabeçaB é uma outra lista
Listas: Implementações
Verficar se um objeto é membro de um lista (uso de variavel anonima)
membro(X,L). / X é o elemento e L é a listaConcatenar listas
concatenar(X,Y,Z). / todos sao listas e Z é resultadoRemover elemento de uma lista
removerInicio(X,L,Z). / Z é a lista L sem XInverter a lista
inverter(X,Y). / Y é a lista X invertidaverificar se uma lista de letras é palíndromo
palindromo(X). / X é uma lista de letras
Referências bibliograficas
PALAZZO, Luiz A. M. Introdução à programação Prolog. 1997. Disponivel em: <http://www2.comp.ufscar.br/~bruno_katekawa/PLP/Prolog/prolog%20livro.pdf>. Acesso: 17 maio 2010.
PROLOG
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS
Elias Melgaço Chaves JúniorJonatas Luiz da Costa
Rafael Gonçalves Barreira