22
Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

Embed Size (px)

Citation preview

Page 1: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

Programação Lógica com Prolog

Curso de Sistemas de Informação2º Período – 2010/02Prof.:Edmilson Ferreira

Page 2: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.: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.

Page 3: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 4: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 5: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 6: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 7: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 8: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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

Page 9: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 10: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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”.

Page 11: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira
Page 12: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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).

Page 13: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 14: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 15: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 16: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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.

Page 17: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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).

Page 18: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

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).

Page 19: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

B eth

G al

Íris

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

Page 20: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

B eth

G al

Íris

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

Page 21: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

B eth

G al

Íris

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

Page 22: Programação Lógica com Prolog Curso de Sistemas de Informação 2º Período – 2010/02 Prof.:Edmilson Ferreira

B eth

G al

Íris

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