programação lógica com prolog curso de sistemas de informação 2º período – 2010/02...
TRANSCRIPT
Programação Lógica com Prolog
Curso de Sistemas de Informação2º Período – 2010/02Prof.:Edmilson Ferreira
O que é diferente na Programação Lógica
Num algoritmo qualquer identificamos dois principais componentes:– lógica - o que solucionar (problema)– controle - como solucionar (solução).
Na programação em lógica o programador deve descrever somente o componente lógico. O controle é exercido pelo sistema usado.
INTRODUÇÃO
Alguns fatos sobre Prolog: O termo Prolog é derivado da expressão “Programming in
Logic”; Foi criado em 1973, na Universidade de Marseille, França Propósito da criação: criar programas para tradução de
linguagem natural (linguagens faladas). Não é uma linguagem padronizada: padrão ANSI esta
sendo formalizado. Enquanto isso, o livro de Clocksin e Mellish, “Programming in Prolog” (1984) é um padrão não oficial.
Geralmente é interpretado, mas pode ser compilado. Escolhida para o projeto japonês da linguagem de 5a.
Geração.
APLICAÇÕES
Lógica matemática, prova automática de teoremas e semântica;
Solução de equações simbólicas; Bancos de dados relacionais; Linguagem Natural; Sistemas Especialistas; Planejamento Automático de Atividades; Aplicações de “General Problem Solving”, como
jogos (Xadrez, Damas, Jogo da Velha, etc.); Compiladores; Análise Bioquímica e projetos de novas drogas.
PROLOG E OUTRAS LINGUAGENS
C, Pascal, Basic: são linguagens Procedimentais (ou imperativas) - especificam como deve ser feita alguma coisa. Codificam algoritmos.
C++, SmallTalk, Eiffel: são linguagens Orientadas a Objetos - especificam objetos e seus métodos.
Prolog: é uma linguagem declarativa - especifica o quê se sabe e o quê deve ser feito.
Prolog é mais direcionada ao conhecimento, menos direcionada aos algoritmos.
Continuação
Prolog não possui estruturas de controle como do-while, repeat-until, if-then-else, for, case ou switch como os encontrados em outras linguagens: em Prolog utiliza-se métodos lógicos para declarar como o programa atinge seu objetivo.
O Prolog reside em sua capacidade de Busca.
CONCEITOS BÁSICOS
Definição: Prolog é uma linguagem de programação que é utilizada para resolver problemas que envolvam objetos e relações entre objetos.
Um programa em Prolog consiste basicamente de: declaração de fatos/Cláusulas (facts) sobre objetos e
suas relações; definições de regras (rules)sobre os objetos e suas
relações; Questões/Consultas (goals) que são feitas sobre os
objetos e suas relações.
FATOS/CLÁUSULAS
Os fatos são os elementos fundamentais da programação em Prolog, pois determinam as relações que existem entre os objetos conhecidos.Exemplo:
gosta (josé, maria).
Predicado ou
Relação
Argumento do Predicado, com vários Objetos
Características dos fatos:
Os nomes dos predicados e dos objetos devem começar com letra minúscula. Por exemplo: joão, casa, gosta.
Os predicados são escritos primeiro e os objetos são escritos depois, separados por vírgulas.
Os objetos são escritos dentro de parênteses. Todo fato é terminado com um ponto final.
Características dos fatos:
A ordem dos objetos é importante: gosta (maria, josé). gosta (josé, maria). Uma coleção de fatos é chamada de “banco de conhecimento” ou “banco de dados”. Os fatos podem ter um número arbitrário de objetos como argumento.NOTA: Para padronizar a criação de predicados (tanto os fatos quanto as regras), devemos sempre pensar que o predicado é uma propriedade do primeiro objeto do argumento. Assim, “gosta (joão, maria).” deve ser lido como “João gosta de Maria”.
Exemplos
progenitor(maria, josé). % Maria é progenitor de José.progenitor(joão, josé).progenitor(joão, ana).progenitor(josé, júlia).progenitor(josé, íris).progenitor(íris, jorge).masculino(joão). % João é do sexo masculino.masculino(josé).masculino(jorge).feminino(maria). % Maria é do sexo feminino.feminino(ana).feminino(júlia).feminino(íris).
O que é diferente na Programação Lógica
Um programa não é a descrição de um procedimento para se obter a solução do problema.
Somente descreve o que solucionar. O responsável pelo procedimento a ser
adotado na execução da solução é o sistema usado no processamento dos programas.
O que é diferente na Programação Lógica
Um programa em lógica (programação declarativa) é a representação de determinado problema através de um conjunto finito de sentenças lógicas denominadas cláusulas.
As cláusulas componentes dos programas em PROLOG podem ser fatos ou regras.
O que é diferente na Programação Lógica
A programação declarativa engloba também a programação funcional (LISP e Haskell, por exemplo).
Programar em uma linguagem funcional consiste em construir funções, expressas obedecendo a princípios matemáticos, para resolver um problema dado.
Cláusulas, Fatos, Regras e Predicado
Cláusulas são as sentenças lógicas componentes dos programas.
Um fato denota uma verdade incondicional. As regras definem as condições a serem
satisfeitas para que uma certa declaração seja considerada verdadeira.
O conjunto completo de cláusulas (fatos e regras) empregados para descrever uma relação, é denominado predicado.
Objetos e suas Relações
A programação em lógica reforça a tese de que a lógica é um formalismo conveniente para representar e processar conhecimento.
Para tanto faz-se necessário identificar nos problemas– objetos (entidades)– relação entre estes compondo os fatos (verdades
incondicionais).
Objetos e suas Relações
A programação em lógica reforça a tese de que a lógica é um formalismo conveniente para representar e processar conhecimento.
Para tanto faz-se necessário identificar nos problemas– objetos (entidades)– relação entre estes compondo os fatos (verdades
incondicionais).
B eth
G al
Íris
Zé
G il Te l
L ipe
A na
JôÉ possível definir, entre os objetos (indivíduos) uma relação chamada progenitor.
progenitor(jo, ze).
progenitor(iris, gal).
Objetos e suas Relações
B eth
G al
Íris
Zé
G il Te l
L ipe
A na
JôCláusula:
progenitor(jo, ze).
Sendo:progenitor(jo, ze). RELAÇÃO ARGUMENTOS
Objetos e suas Relações
B eth
G al
Íris
Zé
G il Te l
L ipe
A na
Jô Cláusulas:progenitor(jo, ze).progenitor(jo, ana).progenitor(ze, beth).
Estas constituem três cláusulas que denotam três fatos acerca da relação progenitor.
Objetos e suas Relações
B eth
G al
Íris
Zé
G il Te l
L ipe
A na
Jô Cláusulas:progenitor(jo, ze).progenitor(jo, ana).progenitor(ze, beth).
Exercício 1: Usando o compilador SWI-ProLog, implementar a árvore ao lado.
Objetos e suas Relações