Programação Orientada a Objetos. Programação Lógica

Documentos relacionados
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira

Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia

BUSCA DE SOLUÇÕES EM PROLOG

Inteligência Artificial. Prolog. Aula 2 Introdução (cont.)

SCC Capítulo 5 Representação de Conhecimento através do Prolog

Capítulo 3 Lógica de Primeira Ordem

UNIDADE ACADÊMICA: Faculdade de

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Linguagens de Programação

03/04/2016 LÓGICA MATEMÁTICA. Prof. Esp. Fabiano Taguchi. Introdução ao Prolog

Programação I Apresentação

Algoritmo e Programação Matemática

Linguagens de Programação Funcional

Aula 2 Programação Lógica Sintaxe Prolog. Profa. Elaine Faria UFU -2014

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Programação em Lógica. UCPEL/CPOLI/BCC Lógica para Ciência da Computação Luiz A M Palazzo Maio de 2010

Prolog. MATA56 - Paradigmas de Linguagens de Programação, UFBA, Prof. Rodrigo Rocha Prolog. Iniciando.

Sistemas Especialistas. Sistemas de Informação/Ciências da Computação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 6)

Noções de algoritmos - Aula 1

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

Linguagens de Programação Programação Lógica (Prolog)

Inteligência Artificial. Sistemas Baseados em Conhecimento. Representação de Conhecimento (continuação)

Curso básico de JavaScript Aula 2

Linguagens de Programação Aula 3

Fundamentos 1. Lógica de Predicados

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Linguagens de Programação e Programação Funcional

Técnicas de Inteligência Artificial

Programação de Computadores:

Algoritmos Computacionais

Conceitos de Linguagens de Programação - Características. Paavo Soeiro

Programação de Computadores IV. Introdução a Linguagens de Programação Simone Martins SLIDES CEDIDOS POR BRUNO MARQUES 1

Paradigmas de Programação

UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ PROLOG PROF. CESAR A. TACLA UTFPR/CURITIBA

Compilador de LP3 para C3E e P3

Prof. A. G. Silva. 24 de agosto de Prof. A. G. Silva Programação em Lógica 24 de agosto de / 1

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Introdução à Ciência da Computação

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

2. Linguagem de Programação Prolog

Algoritmos e Estruturas de Dados I

Linguagem de Programação e Compiladores

CONCEITOS DE ALGORITMOS

Questões de Paradigmas de Programação Matéria: Prova 1 4ª EDIÇÃO

Desenvolvido por: Juarez A. Muylaert Filho - Andréa T. Medeiros - Adriana S. Spallanzani -

Lógica de primeira ordem (Capítulo 8 - Russell) Inteligência Artificial

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

01. [Sebesta, 2000] Quais são os três principais usos da lógica simbólica na lógica formal?

Lógica de Programação I. Gilson de Souza Carvalho

Linguagens de Programação

Sistemas Especialistas (SE)

Introdução à Programação

Algoritmos e Programação - Engenharia da Computação -

Introdução à Programação em Prolog

Fundamentos da programação Parte - 1

Linguagens de Programação

Ambiente de desenvolvimento

Representação de Conhecimento

Conhecimento e Raciocínio Agente Lógicos Capítulo 7. Leliane Nunes de Barros

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

Fundamentos da Computação 1. Aula 03

ALGORITMOS AULA 2. Profª Amanda Gondim

LÓGICA DE PROGRAMAÇÃO. Algoritmos Computacionais. Sérgio Carlos Portari Júnior

Descrição do Mundo de Wumpus. Inteligência Artificial

SEMÂNTICA 02/09/2013. Conceitos de LPs - Semântica

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Paradigma Simbólico. Sistemas de Informação UNISUL Aran Bey Tcholakian Morales, Dr. Eng. (Apostila 2)

Compiladores. Análise Léxica

1 TEORIA DOS CONJUNTOS

Lição 4 Fundamentos da programação

Paradigmas de Linguagem de Programação. Aspectos Básicos

TÉCNICO EM MANUTENÇÃO E SUPORTE EM INFORMÁTICA FORMA SUBSEQUENTE. Professora: Isabela C. Damke

Autômatos e Linguagens

Fluxogramas e variáveis

LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTE

Transcrição:

Programação Orientada a Objetos Programação Lógica Cristiano Lehrer, M.Sc.

Introdução Uma metodologia de programação diferente. Expressar programas na forma de lógica simbólica e a utilização de inferência lógica para produzir resultados. Programação lógica é declarativa, não procedural. Sintaxe diferente das linguagens imperativas e funcionais.

Visão Geral (1/3) Programa consiste de declarações ao invés de atribuições e controle de fluxo. Estas declarações são proposições lógicas. Semântica declarativa: Existe uma única forma de determinar o significado de cada instrução, e isto não depende de como a instrução pode ser usada para resolver o problema. Semântica declarativa é mais simples do que a semântica de linguagens imperativas.

Visão Geral (2/3) O significado de uma dada proposição em uma linguagem de programação lógica pode ser determinado pela própria instrução. Em linguagens imperativas, uma simples atribuição requer o exame de declarações locais, regras de escopo e determinação do tipo. Programação imperativa e funcional são procedurais. Programação lógica não é procedural. Não descrevem como o resultado deve ser alcançado, mas descreve a forma do resultado.

Visão Geral (3/3) O sistema de computação pode, de alguma forma, determinar como o resultado pode ser alcançado. Precisa de um meio para fornecer informações relevantes (cálculo dos predicados) e um método de inferência para computar os resultados (método de prova). Diferença entre procedural e não procedural: Exemplo: produzir uma lista ordenada Procedural: tem que dizer tudo o que tem que ser feito para produzir a lista ordenada. Não procedural: descrever as características de uma lista ordenada.

PROgrammation en LOGique: Prolog Criada em meados de 1972 por Alain Colmerauer e Philippe Roussel. Principais dialetos: University of Aix-Marseille. University of Edinburgh. Fifth Generation Computing Systems: Projeto japonês realizado na década de 80. Criação de um computador com desempenho semelhante a um supercomputador e capacidade prática de inteligência artificial.

Fatos Proposição onde uma nova informação é dada e é assumida ser verdadeira: mulher(shelley). homem(bill). mulher(mary). homem(jake). pai(bill, jake). pai(bill, shelley). mae(mary, shelley). mae(mary, jake).

Termos (1/2) Todas as instruções em Prolog são construídas a partir de termos: Um termo é uma constante, uma variável ou uma estrutura: Constante Átomo sequencia de letras, números e underscore, mas sempre iniciando com uma letra minúscula, ou com aspas simples: fulano 'ciclano' Número sequencia de dígitos, permitindo também os sinais de. (para números reais) e (para números negativos).

Termos (2/2) Variáveis não tem tipo por declaração: A vinculação é chamada de instanciação: Ocorre durante o processo de resolução. Permanece até que um objetivo seja alcançado, o que implica na prova ou não de uma proposição. Estruturas representam as proposições atômicas do cálculo de predicados: As estruturas têm a seguinte forma: função(lista de parâmetros) função identificador da estrutura (átomo) parâmetros qualquer lista de átomos, variáveis e outras estruturas São meios de se especificar fatos.

Regras Uma conclusão pode ser alcançada se um conjunto de condições é satisfeito: Lado direito antecedente ou if Lado esquerdo consequente ou then Se o antecedente é verdade, o consequente também será: pais(x, Y) :- mae(x, Y). pais(x, Y) :- pai(x,y). avos(x, Z) :- pais(x, Y), pais(y, Z). irmaos(x, Y) :- mae(m, X), mae(m, Y), pai(p, X), pai(p, Y).

Meta As instruções são usadas para descrever fatos e regras para descrever o relacionamento entre fatos. Estas instruções são a base do modelo de prova de teoremas. O teorema é uma proposição que se quer provar ou não provar:?- pai(x, jake).

Aritmética Originalmente, operadores eram funções: + (7, X). Uma sintaxe mais abreviada operador is: A is B * 17 + C. Sum is Sum + Number. Sempre falha. Exemplos: speed(ford, 100). speed(chevy, 105). time(ford, 20). time(chevy, 21). distance(x, Y) :- speed(x, S), time(x, T), Y is S * T.

Listas (1/2) Os elementos são separados por vírgulas e a lista inteira é delimitada por colchetes: [maçã, ameixa, uvas, banana] Em consultas, a lista pode ser decomposta: [primero elemento resto dos elementos] Denotação de uma lista vazia: []

append([], Lista, Lista). Listas (2/2) append([cabeca Lista1], Lista2, [Cabeca Lista3]) :- append(lista1, Lista2, Lista3).?- append([bob, jo], [jake, darcie], Familia), write(familia). Família = [bob, jo, jake, darcie]

Deficiências do Prolog (1/3) Embora Prolog seja uma ferramenta útil, não deve ser considerada uma linguagem perfeita de programação lógica. Controle da ordem de resolução: Prolog sempre começa do início dos fatos e regras. Em linguagens puras, a ordem seria não determinística ou concorrente. Usuário pode moldar para uma solução particular.

Controle do backtracking: Deficiências do Prolog (2/3) Operador de corte (cut) representado por uma exclamação. A, B,!, C, D. A suposição do mundo fechado: Prolog não tem conhecimento além de seu banco de dados (fatos e regras). Quando não tem informações suficientes é assumido ser falso (negação por falha). Pode provar que é verdadeiro, mas nunca que é falso.

Problema da negação: Deficiências do Prolog (3/3) pais(bill, jake). pais(bill, shelley). irmaos(x, Y) :- pais(p, X), pais(p, Y). Se fizermos a pergunta?- irmaos(x, Y). A resposta seria X = jake e Y = jake. Solução: irmaos(x, Y) :- pais(p, X), pais(p, Y), not (X = Y).

Sistemas Especialistas: Aplicações Consiste de um banco de dados de fatos, processo de inferência, heurísticas e interfaces. Apropriada para lidar com o problema de inconsistência e incompletude da base de conhecimento. Aprendizado: Pode adicionar fatos e regras e explicar o raciocínio através do princípio da resolução. Processamento de Linguagem Natural: Interfaces de linguagem natural para sistemas computacionais como banco de dados inteligentes e sistemas baseados em conhecimento.

% comentários em Prolog Exemplos (1/4) % write(var) - escrever var na interface de saída % nl - new line - pular de linha % Hello world! saudacao(texto) :- write(texto), nl.?- saudacao("hello world!").

Exemplos (2/4) % Exibir uma caixa de diálogo dialogo() :- read(nome, "Qual o seu nome?", s), nl, write("bom dia "), write(nome), nl.?- dialogo().

Exemplos (3/4) % Contar o número de elementos de uma lista quantidade([], 0). quantidade([car CDR], N) :- quantidade(cdr, AuxQ), N is AuxQ + 1.?- quantidade([a, b, c, d], N), write(n), nl.

Exemplos (4/4) % Concatenar elementos em uma lista concatena([], L, L). concatena([car Lista1], Lista2, [CAR Lista3]) :- concatena(lista1, Lista2, Lista3).?- concatena([a, b, c], [d, e, f], Lista), write(lista), nl.

JIProlog (1/2) JIPEngine jip = new JIPEngine(); jip.consultfile("teste.pl"); JIPTerm queryterm = jip.gettermparser().parseterm("quantidade([a, b, c, d], N)"); JIPQuery jipquery = jip.opensynchronousquery(queryterm); while(jipquery.hasmorechoicepoints()) { JIPTerm solution = jipquery.nextsolution(); if(solution!= null) { System.out.println(solution); for(jipvariable var : solution.getvariables()) { if(!var.isanonymous()) { System.out.println(var.getName() + " = " + var.tostring(jip)); } } } }

JIProlog (2/2) Arquivo teste.pl quantidade([], 0). quantidade([car CDR], N) :- quantidade(cdr, AuxQ), N is AuxQ + 1. Saída quantidade('.'(a,'.'(b,'.'(c,'.'(d,[])))),4) N = 4