Exemplo:- CONTROLE DE RETROCESSO. Construir um programa Prolog para implementar a função:
|
|
|
- Luciano Estrada Quintão
- 8 Há anos
- Visualizações:
Transcrição
1 CONTROLE DE RETROCESSO O retrocesso (backtracking) é um processo pelo qual todas as alternativas de solução para uma dada consulta são tentadas exaustivamente. No Prolog, o retrocesso é automático. É possível controlá-lo através de um predicado especial chamado corte, tado por!. Exemplo:- Construir um programa Prolog para implementar a função: f(x,0) :- X < 3. %1 f(x,2) :- 3 =< X, X < 6. %2 f(x,4) :- 6 =< X. %3 0 se x < 3 f(x) = 2 se x >= 3 e x < 6 4 se x > 6 Visto como uma cláusula, seu valor é sempre verdadeiro. Sua função é provocar um efeito colateral que interfere processamento padrão de uma consulta. Pode ser usado em qualquer posição lado direito de uma regra. Consulta: Execução:?- f(1,y). Y = 0 ; O corte é adequado às situações onde regras diferentes são aplicadas em casos mutuamente exclusivos. Faz com que o programa se torne mais rápido e ocupe mes memória. Quando colocado final de uma cláusula que define um predicado, evita que as cláusulas abaixo dessa, relativas ao mesmo predicado, sejam usadas backtracking. f(1,y) %1 %2 %3 X=1 X=1 X=1 Y=0 Y=2 Y=4 1 < 3 3 <=1, 1 < 6 6 < = 1 sucesso falha falha
2 Na busca, as regras 2 e 3 são tentadas inutilmente, resultando em falha. Sabemos, momento da programação, que as regras representam casos mutualmente exclusivos. O uso do corte torna-se conveniente, para evitar esforço de busca desnecessário e tornar a execução da consulta mais eficiente. f(x,0) :- X < 3,!. %1 f(x,2) :- 3 =< X, X < 6,!. %2 f(x,4) :- 6 =< X. %3 Execuções: f(1,y) f(4,y) %1 %1 %2 X=1 X=4 X=4 Y=0 Y=0 Y=2 1 < 3,! 4 < 3,! 3 < = 4, 4 < 6,! sucesso falha sucesso Este tipo de corte é chamado de corte verde : se for retirado, o programa tem exatamente o mesmo significado. Altera-se apenas a eficiência da execução. O corte pode também ser usado para tornar o programa mais compacto, sem ter que escrever explicitamente as condições de aplicação de cada regra. f(x,0) :- X < 3,!. %1 f(x,2) :- X < 6,!. %2 f(x,4). %3 Este tipo de corte é chamado de corte vermelho : quando retirado, o programa tem significado diferente, geralmente produzindo resultados errados. Execuções: f(1,y) f(4,y) %1 %1 %2 X=1 X=4 X=4 Y=0 Y=0 Y=2 1 < 3,! 4 < 3,! 4 < 6,! sucesso falha sucesso Na consulta f(4,y), quando a cláusula 1 é usada, 4<3 falha e o corte não é executado, assim existe backtracking e a cláusula 2 é usada. Retirando-se os cortes, o programa produz resultados errados.
3 Com o uso do corte, vários programas já estudados podem ser modificados para ficarem mais eficientes. Para usar o corte, deve ser analisada a operação que se espera realizar com o predicado. Contar o número de ocorrências de um dado elemento primeiro nível de uma lista:- conta_occor(elem,[ ],0) :-!. conta_occor(elem,[elem Y],N) :- conta_ocorr(elem,y,n1), N is N1 + 1,!. conta_occor(elem,[elem1 Y], N) :- conta_ocorr(elem,y,n). Eliminar todas as ocorrências de um elemento de uma lista:- del_todas(elem,[ ],[ ]) :-!. del_todas(elem, [Elem Y], Z) :- del_todas(elem,y,z),!. del_todas(elem,[elem1 Y], [Elem1 Z]) :- del_todas(elem,y,z). Dada uma lista de números, separar em duas sendo uma com os positivos e o zero, e outra com os negativos:- separa([ ],[ ],[ ]) :-!. separa([x Y],[X Z],W) :-X >= 0, separa(y,z,w),!. separa([x Y],Z,[X W]) :- separa(y,z,w).?- separa([1,3,-5,0,-64,37,0,19,-53],p,n). P = [1,3,0,37,0,19], N = [-5,-64,-53] ; Dada uma lista de números, separar em duas sendo uma com os positivos e outra com os negativos, descartando o zero:- separa_sz([ ],[ ],[ ]) :-!. separa_sz([x Y],[X Z],W) :-X > 0, separa_sz(y,z,w),!. separa_sz([x Y],Z,[X W]) :-X < 0, separa_sz(y,z,w),!. separa_sz([x Y],Z,W) :- separa_sz(y,z,w).?- separa_sz([1,3,-5,0,-64,37,0,19,-53],p,n). P = [1,3,37,19], N = [-5,-64,-53] ;
4 Termos para verificação de tipo atom(x) testa se X é átomo atomic(x) testa se X é átomo ou número compound(x) testa e X é um termo composto float(x) testa se X é número em ponto flutuante integer(x) testa se X é número inteiro nvar(x) testa e X não é variável Construir um programa para desparentizar uma lista, ou seja, eliminar os delimitadores das listas internas, exceto da lista vazia :- Dada a lista obtemos [a,b,[c,d[e,f,[g]],d, [q,[w]], d], []] [a,b,c,de,f,g,d, q,w, d, []] number(x) simple(x) type(x,y) testa se X é número em ponto flutuante ou inteiro verifica se X é átomo, número ou variável retorna o tipo de um termo X(ver tabela abaixo) desparentize([ ], [ ]). desparentize([x Y], [X Z]) :- t type(x,6), desparentize(y,z),!. desparentize([x Y], Z) :- desparentize (X, X1), desparentize (Y, Y1), conc(x1, Y1,Z). var(x) testa se X é variável não instanciada Valores retornados por type(x,y) +X -Y 0 variável 1 inteiro 2 número em ponto flutuante 3 átomo 4 string 5 lista vazia 6 lista 7 n-upla 8 conjunção 9 disjunção?- desparentize([a,[b],c,[d,[e]],f],l). L = [a,b,c,d,e,f]?- desparentize([a,[b],c,[], [[d,[e]],f]],l). L = [a,b,c,[],d,e,f]?- desparentize([a],l). L = [a]?- desparentize([],l). L = []?- desparentize(a,l).?- desparentize(funtor(a,b),l).
5 Fatorial fatorial(n,f) :- N>=0, fat(n,f). fat(0,1) :-!. fat(n,f) :- N1 is N - 1, fat(n1,f1), F is F1 * N.?- fatorial(0,f). F = 1?- fatorial(3,f). F = 6?- fatorial(-4,f).
Controle de Retrocesso. Programação Lógica. Controle de Retrocesso. Controle de Retrocesso
Programação Lógica Prolog: controle de retrocesso, predicado especial corte (!), verificação de tipos, exemplos O retrocesso (backtracking) é um processo pelo qual todas as alternativas de solução para
Programação Lógica. Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel
Programação Lógica Controle (Bactracking, Cut, Fail) Paulo Henrique Ribeiro Gabriel [email protected] Faculdade de Computação Universidade Federal de Uberlândia 7 de outubro de 2015 Paulo H. R. Gabriel (FACOM/UFU)
GSI010 - Programação Lógica Predicados extra-lógicos
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
Sintaxe e Semântica de Programas Prolog
Sintaxe e Semântica de Programas Prolog Thiago A. S. Pardo Solange Rezende Inteligência Artificial 1 Objetos em Prolog Objetos (Termos) Objetos Simples Estruturas Constantes (Atômicos) Variáveis Átomos
3.4 Álgebra booleana, ordens parciais e reticulados
Notas de aula de MAC0329 (2003) 23 3.4 Álgebra booleana, ordens parciais e reticulados Seja A um conjunto não vazio. Uma relação binária R sobre A é um subconjunto de A A, isto é, R A A. Se (x, y) R, denotamos
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS. Bruno Maffeo Departamento de Informática PUC-Rio
USANDO UM MÉTODO INDUTIVO PARA RESOLVER PROBLEMAS Bruno Maffeo Departamento de Informática PUC-Rio MÉTODO INDUTIVO O método indutivo para resolver problemas aqui empregado inspira-se na formulação mais
Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas
Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas SCC-502 Algoritmos e Estruturas de Dados I Prof. Thiago A. S. Pardo Lista com nó de cabeçalho Nó de cabeçalho Header, sentinela, etc.
Objetos Estruturados Listas Recursão Exercícios. Inteligência Artificial
Prolog Objetos Estruturados Objetos Estruturados Listas Recursão Exercícios Inteligência Artificial Exercícios Relembrando a introdução: 1. Escreva um programa Prolog para representar: João nasceu em Campos
Sintaxe e Semântica de Programas Prolog
Inteligência Artificial Sintaxe e Semântica de Programas Prolog José Augusto Baranauskas Departamento de Física e Matemática FFCLRP-USP Sala 228 Bloco P2 Fone (16) 602-4439 Esta aula trata da sintaxe e
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2
Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas Aula Tópico 2 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para o compilador
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG. Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira
CENTRO UNIVERSITÁRIO LUTERANO DE PALMAS PROLOG Elias Melgaço Chaves Júnior Jonatas Luiz da Costa Rafael Gonçalves Barreira Roteiro Linguagens de Programação em Lógica: histórico THIS IS PROLOG!!!! SWI-Prolog
Fundamentos e prática de Prolog
Disciplina: Lógica Aplicada à Computação Nome: Matrícula: 1. Considere a seguinte base de conhecimentos Prolog: filho(paulo,pedro). % "Paulo é filho de Pedro" filho(paulo,marcela). filho(pedro,josé). filho(pedro,isabel).
Fundamentos de Lógica Matemática
Webconferência 5-22/03/2012 Prova por resolução Prof. L. M. Levada http://www.dc.ufscar.br/ alexandre Departamento de Computação (DC) Universidade Federal de São Carlos (UFSCar) 2012/1 Introdução É possível
Conceitos de Linguagem de Programação - 2
Conceitos de Linguagem de Programação - 2 Arthur Jovita Guerra Thalles Santos Silva Universidade Estadual de Santa Cruz - Ilhéus, BA 1 de novembro de 2011 1 Revisão Natureza das linguagens de Programação
Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.
Prof. André Backes Função Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. print(): função que escreve na tela input (): função que lê o teclado 1 Função Facilitam
Teoria da Computação
Introdução Março - 2009 1 Noções e Terminologia Matemática Conjuntos Um conjunto é um grupo de objetos, chamados elementos ou membros, representado como uma unidade. O conjunto { 3, 41, 57} possui os elementos
Programação Lógica. A Linguagem Prolog. Paulo Henrique Ribeiro Gabriel Faculdade de Computação Universidade Federal de Uberlândia
Programação Lógica A Linguagem Prolog Paulo Henrique Ribeiro Gabriel [email protected] Faculdade de Computação Universidade Federal de Uberlândia 21 de agosto de 2015 Paulo H. R. Gabriel (FACOM/UFU) Programação
Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas. SCC-502 Algoritmos e Estruturas de Dados I
Listas: nós de cabeçalho, listas não homogêneas, listas generalizadas SCC-502 Algoritmos e Estruturas de Dados I Lista com nó de cabeçalho Nó de cabeçalho Header, sentinela, etc. Para que? Sentinela Beth
Lógica Texto 7. Texto 7. 1 Negação de enunciados atômicos Exercício resolvido Negação de enunciados moleculares 5
Lógica para Ciência da Computação I Lógica Matemática Texto 7 Negação e simplificação de enunciados Sumário 1 Negação de enunciados atômicos 2 1.1 Observações................................ 2 1.2 Exercício
-Roteiro do professor-
NÚMEROS INTEIROS -Roteiro do professor- Introdução teórica: As regras de sinais nas operações com números inteiros, em geral, causam dificuldades de aprendizagem aos alunos, ocasionando seqüelas no desenvolvimento
Fundamentos de Programação. Linguagem C++ aula II - Variáveis e constantes. Prof.: Bruno Gomes
Fundamentos de Programação Linguagem C++ aula II - Variáveis e constantes Prof.: Bruno Gomes 1 Variáveis Representa uma porção da memória que pode ser utilizada pelo programa para armazenar informações
Conceitos Básicos Linguagem C
Conceitos Básicos Linguagem C PROF. MAURÍCIO A DIAS [email protected] 2 Método Método básico para construção de algoritmos 1. Compreender completamente o problema a ser resolvido, se possível dividindo
SCC Capítulo 5 Representação de Conhecimento através do Prolog
SCC-630 - Capítulo 5 Representação de Conhecimento através do Prolog João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4
Algoritmos e Estruturas de Dados I (DCC/003) 2013/1 Estruturas Básicas Aula Tópico 4 1 Problema 3 Exibir o maior número inteiro que pode ser representado no computador. 2 Qual o maior número inteiro? Para
PROGRAMAÇÃO I E N T R A DA E S A Í DA D E DA D O S
PROGRAMAÇÃO I VA R I Á V E I S, C O N S TA N T E S, O P E R A D O R E S E N T R A DA E S A Í DA D E DA D O S Variáveis 2 Variáveis são locais onde são armazenados os valores na memória. Toda variável é
BUSCA DE SOLUÇÕES EM PROLOG
PR UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ BUSCA DE SOLUÇÕES EM PROLOG Resolução em PROLOG: Unificação e substituição 1 UNIFICAÇÃO EM PROLOG HISTÓRICO 2 HISTÓRIA A PARTIR DE 1950 1958 forma clausal:
Introdução a Linguagem C. Prof. Me. Hélio Esperidião
Introdução a Linguagem C Prof. Me. Hélio Esperidião Características de um programa De forma geral a maioria dos programas são compostos por dados de entrada, processamento e dados de saída. Entrada de
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
semana 03/05/2014 a 09/05/2014 semana 10/05/2014 a 16/05/2014 semana 17/05/2014 a 23/05/2014 24 e 25/05/2014 PROGRAMAÇÃO DE 03/05/2014 a 09/05/2014 PROGRAMAÇÃO DE 03/05/2014 a 09/05/2014 PROGRAMAÇÃO DE
Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo
Tratamento de Exceções LPG II Java Tratamento de Exceções Introdução Princípios do tratamento de exceções em Java Cláusula try Cláusula catch Cláusula finally Hierarquia de exceções em Java Considerações
Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV
PROGRAMAÇÃO EM LÓGICA Recursão CIÊNCIA DA COMPUTAÇÃO FACAPE Faculdade de Ciências Aplicadas e Sociais de Petrolina Linguagem Prolog Parte IV Usado desde a arte (em figuras, telas, etc) como também em Matemática
Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação
Compiladores Analisador Sintático Prof. Antonio Felicio Netto [email protected] Ciência da Computação 1 Análise Sintática - A Análise Sintática constitui a segunda fase de um tradutor de uma
Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas
Nome: Número: Computação e Programação 2017-2018 Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas DECivil Exame Época Normal 10 de janeiro de 2018 Exame sem
(A1) As operações + e são comutativas, ou seja, para todo x e y em A, x + y = y + x e x y = y x
Notas de aula de MAC0329 (2003) 17 3 Álgebra Booleana Nesta parte veremos uma definição formal de álgebra booleana, a qual é feita via um conjunto de axiomas (ou postulados). Veremos também algumas leis
Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013
Linguagem Haskell Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação Tiago Carneiro 19 Agosto 2013 1 1 Linguagem Haskell Linguagem de programação funcional É um paradigma de programação
Questão 1. Nome para o arquivo fonte questao1.c
Questão 1 Nome para o arquivo fonte questao1.c Construa um programa, na linguagem de programação C, que receba através da entrada padrão um número natural, o qual indicará quantas operações de divisão
Variáveis e Entrada de Dados Marco André Lopes Mendes marcoandre.googlepages.
Variáveis e Entrada de Dados Marco André Lopes Mendes [email protected] [email protected] marcoandre.googlepages.com Algoritmos é a base Primeiro programa Este programa possui apenas uma
Tipos Algébricos. Programação Funcional. Capítulo 11. José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto
Programação Funcional Capítulo 11 Tipos Algébricos José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2012.1 1/33 1 Tipos Algébricos 2/33 Tópicos 1 Tipos Algébricos 3/33
Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema
ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.
LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.
LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado
Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória
Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];
LINGUAGEM DE PROGRAMAÇÃO
Técnico em Informática LINGUAGEM DE PROGRAMAÇÃO Profª Ana Paula [email protected] Estruturas de Repetição Em muitos casos, o algoritmo solução para uma determinada classe de problemas, apresenta
FUNÇÕES I- PRÉ-REQUISITOS PARA O ESTUDO DAS FUNÇÕES
FUNÇÕES I- PRÉ-REQUISITOS PARA O ESTUDO DAS FUNÇÕES 1- PRODUTO CARTESIANO 1.1- Par Ordenado - Ao par de números reais a e b, dispostos em uma certa ordem, denominamos par ordenado e indicamos por: (a,
Sincronização e Comunicação entre Processos
Sincronização e Comunicação entre Processos Monitores/Semáforos Semáforos Mecanismos de sincronização nãoestruturados; Exige do desenvolvedor bastante cuidado, pois qualquer engano pode levar a problemas.
1 Derivadas Parciais de Ordem Superior Em duas variáveis Em três variáveis. 1.3 Derivadas de Ordem
Contents 1 Derivadas Parciais de Ordem Superior 1 1.1 Em duas variáveis..................................... 1 1. Em três variáveis...................................... 1 1.3 Derivadas de Ordem...................................
Introdução à Programação em Prolog
Introdução à Programação em Prolog Thiago A. S. Pardo Solange Rezende Exercício em duplas Introdução (1 de 4) Escrever um programa completo em C que armazene quem gosta de quem e que responda sim ou não
Recursividade. Prof. Jesus José de Oliveira Neto
Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos
A Lógica de Primeira Ordem
Capítulo 10 A Lógica de Primeira Ordem A Lógica de Primeira Ordem: A necessidade de uma linguagem mais expressiva O cálculo proposicional possui limitações com respeito a codificação de sentenças declarativas.
Estatística e Modelos Probabilísticos - COE241
Estatística e Modelos Probabilísticos - COE241 Aula passada Probabilidade Condicional Independência de Eventos Teorema da Probabilidade Total Lei de Bayes Aula de hoje Exemplo Lei de Bayes Variáveis Aleatórias
6. OPERADORES E ARITMÉTICA
6. OPERADORES E ARITMÉTICA 6.1 OPERADORES Na matemática costuma-se escrever expressões como 2*a + b*c onde + e * são operadores e 2, a, b e c são argumentos. Em particular, + e * são denominados operadores
Variáveis e Memória. Revisão. Conceitos. Operações sobre a memória
Variáveis e Memória Revisão Estudamos, na Introdução, que os programas de computador implementam algoritmos, os quais manipulam um conjunto de dados para produzir um resultado. O algoritmo é um conjunto
Introdução à Ciência da Computação
Créditos Introdução à Ciência da Computação Tópicos Preliminares em Programação Exceto por adaptações e complementos menores, o material a seguir é composto de slides gentilmente cedidos por: Prof. Rudinei
MATEMÁTICA. Conceito de Funções. Professor : Dêner Rocha
MATEMÁTICA Conceito de Funções Professor : Dêner Rocha Monster Concursos 1 Noção de Função 1º) Dados A = {-, -1, 0, 1, } e B = {-8, -6, -4, -3, 0, 3, 6, 7} e a correspondência entre A e B dada pela fórmula
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro [email protected] Como construir um
LÓGICA DIGITAL - CONCEITOS. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas.
* Tipos de Dados. * Constantes. * Expressões: Aritméticas; Lógicas; Tabela Verdade; Relacionais; Booleanas. * Portas Lógicas. 1 TIPOS DE DADOS Dados inteiros Representação das informações pertencentes
Linguagem C: Introdução
Linguagem C: Introdução Linguagem C É uma Linguagem de programação genérica que é utilizada para a criação de programas diversos como: Processadores de texto Planilhas eletrônicas Sistemas operacionais
Capítulo 3 Lógica de Primeira Ordem
Capítulo 3 Lógica de Primeira Ordem Lógica para Programação LEIC - Tagus Park 1 o Semestre, Ano Lectivo 2007/08 c Inês Lynce and Luísa Coheur Bibliografia Martins J.P., Lógica para Programação, Capítulo
ALGORITMOS DE ORDENAÇÃO
ALGORITMOS DE ORDENAÇÃO Prof. André Backes Conceitos básicos 2 Ordenação Ato de colocar um conjunto de dados em uma determinada ordem predefinida Fora de ordem 5, 2, 1, 3, 4 Ordenado 1, 2, 3, 4, 5 OU 5,
