GSI010 - Programação Lógica Predicados extra-lógicos

Documentos relacionados
UNIDADE ACADÊMICA: Faculdade de

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

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

Objectivos. Introdução à programação Macros em Microsoft Excel Introdução ao Visual Basic para Aplicações (VBA)

4 Conceito de Herança

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

INFORMÁTICA APLICADA AULA 05 LINGUAGEM DE PROGRAMAÇÃO C++

INF 1771 Inteligência Artificial

extendsé usado para indicar herança em JAVA

Sintaxe e Semântica de Programas Prolog

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Correção Ortográfica. Processamento Estatístico da Linguagem Natural. Correção de Erros. Distância Mínima de Edição. Distância Mínima de Edição

PRIMEIROS PASSOS COM PYTHON. Prof. Msc. Luis Filipe Alves Pereira 2015

Lista de Comandos: Arquivo texto e Binário

JavaScript (Elementos de Programação e Programação Básica)

Paradigmas de Linguagens

Lição 4 Fundamentos da programação

Algoritmos Fundamento e Prática

Aula Prática 3. Paradigmas da Programação I / Programação Funcional. ESI/MCC 1 o ano (2005/2006)

Listas em Prolog. Listas

Estruturas de Repetição e String. Vanessa Braganholo

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Paradigmas de Programação

Rodrigo de Barros Paes

CURSO BÁSICO DE PROGRAMAÇÃO AULA 6. Revisão Laços de Repetição

Expressão Condicional

Nomes, Amarração, Verificação de Tipos, e Escopo

Array em Java. Figura 1 - Exemplo de um array de inteiros

Aula 3. Objetivos Sequências de escapes ; Um aplicativo que adiciona inteiro; Aritmética.

Aula 4 Estruturas de Controle

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Estruturas de Repe,ção e String

Algoritmos I Aula 13 Linguagem de Programação Java

Exemplos de programação em PASCAL

Programação Orientada a Objetos para Redes de Computadores

Estruturas de controle Parte 1

Conceitos básicos de programação

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE DEPARTAMENTO DE INFORMÁTICA E MATEMÁTICA APLICADA. DIM0320 Algoritmos e Programação de Computadores

Compiladores Aula 12. Celso Olivete Júnior.

Programação Funcional

5 Arrays. 5.1 Criando um array. 5.2 Inicializando arrays. c:\>java Array Janeiro tem 31 dias.

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

PHP: <?php echo("hello World");?> Printa Hello World na página do navegador, mais fácil do que no Java.

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Linguagens de Programação Aula 13

Pedro Vasconcelos DCC/FCUP. Programação Funcional 13 a Aula Definição de tipos

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

9 Classes Abstractas e Interfaces

Aula 02: Custos de um algoritmo e funções de complexidade

Paradigmas de Programação. Programação Lógica. Profª Andréa Schwertner Charão DLSC/CT/UFSM

Pedro Vasconcelos DCC/FCUP. Programação Funcional 14 a Aula Um verificador de tautologia

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Introdução. Atributos em Java. Atributos. Acesso à atributos em Java. Atributo versus variável. Atributos, métodos e encapsulamento.

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Aula de hoje. Comandos. Comandos simples. Comandos. Comandos de controle. Bloco de comandos. SCC Introdução à Programação para Engenharias

semana 03/05/2014 a 09/05/2014 semana 10/05/2014 a 16/05/2014 semana 17/05/2014 a 23/05/ e 25/05/2014

Introdução à Programação em Java Constantes, expressões e variáveis

Introdução ao Fortran 90. Aula 3

AULA TEÓRICA 5 Tema 3. Instruções básicas de entrada e saída (continuação)

Classe. Objeto é uma instância de uma classe. Classe é onde conceituamos o objeto É a essência do objeto Define os atributos e métodos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Linguagens de Programação Conceitos e Técnicas. Amarrações

INTRODUÇÃO AO USO DO DEV C++ Disciplina: Introdução à Ciência da Computação Prof. Modesto Antonio Chaves Universidade estadual do Sudoeste da Bahia

Pedro Vasconcelos DCC/FCUP. Programação Funcional 2 a Aula Tipos e classes

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Ambientação com a Sintaxe de Java: parte 1

ESTRUTURA DE DADOS VETORES E LISTAS LINEARES

Gabriel Giorisatto De Angelo Luiz Otávio Gerhardt Fernandes

Vetores Unimensionais

Linguagem Python. Inteligência Artificial. Características de Python. Importando módulos. Módulos. Usando Python no modo interativo

Conceitos de Linguagens de Programação

Computação Científica com Python

Paradigmas da Programação PPROG. Linguagem JAVA. Contentores de Objetos

AULA 11 PROGRAMAÇÃO ORIENTADA A OBJETOS (INTRODUÇÃO) Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Aula teórica 4. Tema 3. Linguagem de Programação Java. Manipulação de informação simples (cont.)

Manipulação de Strings. Vanessa Braganholo

Objetos Estruturados Listas Recursão Exercícios. Inteligência Artificial

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Aula de hoje. Listas. Sequências especiais. Introdução. Listas. Sequências. SCC Introdução à Programação para Engenharias

Lógica e Bases de Dados. Prof. Elaine Faria e Hiran Nonato Programação Lógica UFU 2012

Disciplina de Algoritmos e Programação

Transcrição:

GSI00 - Programação Lógica Predicados extra-lógicos

Aula de hoje Predicados extra-lógicos Operações com listas Operações com as bases de fatos

Predicados extra-lógicos Definição Predicado para trabalhar com outros predicados verificação do conteúdo de variáveis/tipos findall, bagof, setof manipulação de fatos aplicando operações a listas

Predicados para verificar tipos Para tipos numéricos: integer/, float/, number/ Para tipos átomos (strings simples, não numéricos):atom/ somainteiros(x,y,z) : integer(x), integer(y), Z is X+Y. ler_idade(x) : read(x), number(x), X >= 0, X<0. ler_atomo(x) : read(x), atom(x).

Predicados para verificar tipos Para tipos simples (não compostos): atomic/ Para tipos compostos (não simples): compound/ Para variáveis unificadas ou não: nonvar/, var/ simplesoucomposto(x) : atomic(x),!, write( Conteudo da variavel: simples. ). simplesoucomposto(x) : compound(x), write( Conteudo da variavel: composto ).

Construção e decomposição de termos Predicados extra-lógicos para decompor e compor termos: functor/ functor(termo, Functor, Aridade) Unifica com o Termo, seu Functor e Aridade arg/ arg(n, Termo, Argumento) Unifica com N-ésimo Argumento de um Termo =../ Termo =.. Lista = [Functor Argumentos] Unifica o Functor e Argumentos de um Termo em uma Lista

Predicado extra-lógico: functor/ functor(termo, Functor, Aridade) Unifica com o Termo, seu Functor e Aridade arg/ Unifica com N-ésimo Argumento de um Termo? functor(pagina(idioma(portugues), pagina principal, http://www.ufu.br ), Functor, Aridade). Functor=pagina, Aridade=.? arg(, pagina(idioma(portugues), pagina principal, http://www.ufu.br ), Conteudo). Conteudo= pagina principal. %construção de um novo termo data/? functor(d, data, ), arg(, D, ), arg(, D, abril), arg(, D, 99). D=data(, abril, 99). 8 9

Predicado extra-lógico: =../ Termo =.. Lista = [Functor Argumentos] Unifica o Functor e Argumentos de um Termo em uma Lista Pagina = html(meta([idioma(portugues), palavra_chave(prolog), palavra_chave(ufu), titulo( Pagina prolog da ufu )]), body(estilo([font(arial)]), conteudo([h(fontcolor(red),subtitulo), p(estilo([bold]),conteudo([ Primeira frase do paragrafo,br, frase do p ])), p(estilo([italic]), conteudo([ frase do p. ])) ])) ), Pagina =.. Lista. 8 9 0

Adicionar e remover fatos da base de dados Listar fatos: listing Adicionar fatos: assert/ adiciona sem garantia de aonde asserta/ adiciona no começo da lista de fatos assertz/ adiciona no fim Remover fatos: retract/ - remover um fato retractall/ - remover vários fatos

Fatos dinâmicos e estáticos Organização do que é código fixo e o que é informação temporária e alterável. Fatos e predicados podem ser dinâmicos ou estáticos. static se for carregado de arquivo não pode ser modificado por assert ou retract dynamic pode ser modificado por assert e retract

Declaração um fato dinâmico Usar no começo do arquivo de dados filme.pl da seguinte forma. : dynamic filme/, ator/. filme( jurassic park, spielberg ).

Guardando respostas prévias: call/ resolve/ call(consulta, Arg, Arg,...) call é verdade se a Consulta for verdadeira? assert(filme(schindler, spielberg)). true.? assert(filme(jurassic, spielberg)). true.? call(filme, NomeDoFilme, spielberg), assertz(filme_spielberg( NomeDoFilme)). NomeDoFilme = schindler.? listing(filme_spielberg). : dynamic filme_spielberg/. filme_spielberg(schindler). true. 8 9 0

Operações em listas Como executar uma determinada regra em cada elemento de uma lista? maplist/ true se a Regra/ aplicada em cada elemento da Lista sempre é verdade maplist(regra, Lista) maplist/ usar de Regra tem aridade maplist(regra, Lista, Lista) maplist/ usar para Regra/ maplist(regra, Lista, Lista, Lista)? multiplica(,,x). X =.? multiplica(,,x). X =.? maplist(multiplica, [,,,,], [0,0,,,], R). R = [0, 0,, 8, 0].? maplist(multiplica, [,,,,], [0,0,,], R). false. 8 9 0

Predicados bagof/, setof/, findall/ bagof/, setof/, findall/ Criam listas para todas as possíveis unificações. Diferenças entre eles findall/ acumula em uma lista todas as unificações de todas as variáveis bagof/ acumula unificações em uma lista separada para cada variável setof/ parecido ao bagof mas elimina repetições e ordena

findall/ Base: classe(a, vog). classe(b, con). classe(c, con). classe(d, con). classe(e, vog). classe(f, con). classe(o, vog).... 8 Consulta:? findall(letra, classe(letra, Classe), Lista).

bagof/ Base: classe(a, vog). classe(b, con). classe(c, con). classe(d, con). classe(e, vog). classe(f, con). classe(o, vog).... 8 Consulta:? bagof(letra, classe(letra, Classe), Lista).

setof/ Base: classe(a, vog). classe(b, con). classe(c, con). classe(d, con). classe(e, vog). classe(f, con). classe(o, vog).... 8 Consulta:? setof(classe/letra, classe(letra, Classe), Letras).

Exemplos? maplist(assertz, [idade(pedro,), idade(ana,), idade(alice,), idade(joao, 8)]). true.? findall(crianca,idade(crianca,idade),l). L = [pedro, ana, alice, pedro, ana, alice, joao].? findall(crianca/idade,idade(crianca,idade),l). L = [pedro/, ana/, alice/, pedro/, ana/, alice/, joao/8].? findall(crianca/idade, (idade(crianca,idade),idade>),l). L = [pedro/, pedro/, joao/8]. 8 9 0

Exercícios: fazer a seguinte regra Fazer pegar_titulo/ que recebe a descrição de um HTML e retorna o título dele.? Pagina = html(meta([idioma(portugues), palavra_chave(prolog), palavra_chave(ufu), titulo( Pagina prolog da ufu )]), body(estilo([font(arial)]), conteudo([h(fontcolor(red),subtitulo), p(estilo([bold]),conteudo([ Primeira frase do paragrafo,br, frase do p ])), p(estilo([italic]), conteudo([ frase do p. ])) ])) ), pegar_titulo(pagina, Titulo). Titulo= Pagina prolog da ufu. 8 9 0

Exercícios: fazer a seguinte regra Fazer pegar_fato/ que recebe a descrição de um HTML e o nome de um Functor de um fato de interesse e retorna, se houver, todos os Fatos com esse functor.? Pagina = html(meta([idioma(portugues), palavra_chave(prolog), palavra_chave(ufu), titulo( Pagina prolog da ufu )]), body(estilo([font(arial)]), conteudo([h(fontcolor(red),subtitulo), p(estilo([bold]),conteudo([ Primeira frase do paragrafo,br, frase do p ])), p(estilo([italic]), conteudo([ frase do p. ])) ])) ), pegar_fato(pagina, FunctorFato=p, Fatos). Fatos = [p(estilo([bold]),conteudo([ Primeira frase do paragrafo,br, frase do p ])), p(estilo([italic]), conteudo([ frase do p. ]))]. 8 9 0

Referências User guide, Programming in XPCE/Prolog, Wielemaker e Anjewierden (00). Luis, A. M. Palazzo, Introdução à programação prolog, Educat, 99 Slides profs. Elaine Faria, Hiran Nonato e Gabriel Coutinho - UFU Slides da Profa. Solange - ICMC - USP