Prolog: Predicados Built-in 2

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Introdução à Linguagem Prolog
Linguagem de Programação I
Fundamentos de Prolog: uma breve introdução à programação em lógica Jacques Robin, DI-UFPE
Capítulo 9 A semântica da Lógica de Predicados
Prolog: Predicados Built-in 1
Tipos de igualdade X = Y é verdadeiro se X é igual a Y. X is E é verdadeiro se X é a avaliação da expressão E. E1 =:= E2 é verdadeiro se a avaliação da.
Introdução a Programação Renata Freire
Introdução à Linguagem Prolog
Busca em Profundidade Para encontrar um caminho de solução Sol, de um dado nó para algum nó objetivo Se N é um nó objetivo, então Sol=[N] Se há um nó N1.
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
Jacques Robin, DI-UFPE Prolog: comparação com outras linguagens de programação e de representação do conhecimento Jacques Robin, DI-UFPE.
Programação em lógica e lógica
Rodar XSB Prolog no Unix Shell
Life Leonardo Lemos (lal)Paulo Oliva (pbo)& Controle de Fluxo * de predicados: Como em Prolog: fail. conjunção (A,B). disjunção (A;B). Diferente de Prolog:
LIFE: predicados, funções e sorts built-in Jacques Robin Paulo Oliva Leonardo Lemos DI-UFPE.
LINGUAGEM C.
INTRODUÇÃO À PROGRAMAÇÃO
Programação Lógica: PROLOG
6. Backtracking e Controle
2. A Linguagem Prolog.
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Algoritmos e Estruturas de Dados II
Linguagem C Estruturas de Seleção.
Programação Baseada em Objectos Desenho de TAD
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação JAVA
Algoritmos e Programação
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
Listas e algoritmos (em Scratch)
Introdução a Programação em Lógica e Prolog
Algoritmos e Estruturas de Dados I – Estruturas de Dados
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Inteligência Artificial: A Linguagem Prolog (parte 2)
Sintaxe e Semântica do PROLOG.
Aula Prática - Prolog Sistemas Inteligentes /~if684
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Prolog Programação Lógica Ícaro A. Souza.
Unidade 3 Controle de Concorrência
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula Prática - Prolog Sistemas Inteligentes /~if684
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Conceitos e Linguagens de Programação
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Fábio de Oliveira Borges
Introdução e Busca Cega
Introdução a Programação em Lógica e Prolog
Augusto Sampaio e Paulo Borba Centro de Informática
Uma Breve Introdução á programação lógica
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Procedimentos Pré-definidos em prolog comunicação
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
ARQUIVOS.
Sistemas Especialistas Podem ser definidos como programas de computador desenvolvidos para representar o conhecimento humano num dado domínio específico.
Operadores Relacionais e Lógicos
Algoritmos e Estrutura de Dados I Jean Carlo Mendes
INTRODUÇÃO À PROGRAMAÇÃO EM LÓGICA Profa. Joseluce de Farias Cunha
Algoritmos e Estruturas de Dados I – Estruturas de Dados
Introdução a Programação em Lógica e Prolog
Programação Funcional
Programação em Lógica Indutiva Jacques Robin DI-UFPE.
Rodar XSB Prolog no Unix Shell Conectar-se em qualquer maquina SunOS5 (ex,Caruaru) Concatenar /home/robocup/solaris/XSB/bin/ na variável de ambiente PATH.
Programação de Computadores - 1
Paradigmas das Linguagens de Programação - História
PROGRAMAÇÃO LÓGICA Vinicius Ponte Machado Aula 13 – Predicados de Controle UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI Departamento de Informática & Estatística.
Sistemas de Produção Jacques Robin CIn-UFPE. Roteiro  Definição de um sistemas de produção  Regras de produção  Inferência com regras de produção 
8. Entrada e Saída. Arquivos de Dados Algumas aplicações podem exigir a entrada e saída de dados para diferentes dispositivos e em diferentes formatos.
Transcrição da apresentação:

Prolog: Predicados Built-in 2 Jacques Robin, DI-UFPE www.di.ufpe.br/~jr

Prolog: aritmética 3 tipos de operadores built-in aritméticos: calculadores (n-ários infixos): +, -, *, /, mod comparadores (binários infixos): =:=, =\=, <, >, =<, > o atribuídor is: Variável is ExpressãoAritmética Expressão aritmética: fórmula atômica contendo apenas números e calculadores aritméticos todos os argumentos dos calculadores e comparadores devem ser instanciados com expressões aritméticas

Prolog: exemplos de aritmética 1 > ?- 1 + 1 < 1 + 2. yes > ?- 1 + 3 =:= 2 + 2. > ?- 1 + 3 = 2 + 2. no > ?- 1 + A = B + 2. A = 2 B = 1 > ?- 1 + A =:= B + 2. Error > ?- A = 2, B = 1, 1 + A =:= B + 2. > ?- C = 1 + 2. C = 1+2 > ?- C == 1 + 2. no > ?- C is 1 + 2. C = 3 > ?- C is D, D = 1 + 2. Error. > ?- D = 1 + 2, C is D. D=1+2 C=3 > ?- -1+2 = +(-(1),2). > ?- -1+2 =:= +(-(1),2). yes

Prolog: exemplos de aritmética 2 fac(0,1) :- !. fac(I,O) :- I1 is I - 1, fac(I1,O1), O is I * O1. ?- fac(1,X). X = 1 ?- fac(3,X). X = 6 ?- fac(5,X). X = 120 sum([],0). sum([H|T],N) :- sum(T,M), N is H + M. ?- sum([2,1,3,1],S). S = 7 ?- sum([2,10,1],S). S = 13

Prolog: teste de tipos semântica declarativa de var fora de L1

Prolog: exemplos de teste de tipos ?- var(X). X = _3 ?- var(2). no ?- var(a). ?- var(p(a,X)). ?- nonvar(2), nonvar(p(2,X,a)). X = _11 ?- X is 2 + 3, var(X). ?- var(X), X is 2 + 3. X = 5 ?- numberp(Term) :- integer(Term). numberp(Term) :- real(Term). structp(Term) :- nonvar(Term), not atomic(Term). listp(Term) :- nonvar(Term), listp1(term). listp1([]). listp1([H|T]) :- listp1(T). factp(Term) :- strucp(Term), not listp(Term).

Prolog: conversão de tipos name(Átomo,Caracteres): conversão bi-direcional entre átomo e cadeia de caracteres que constitui o seu nome list(CódigosAscii,Caracteres): conversão bi-direcional entre um lista de inteiros vistos como códigos ascii e cadeia de caracteres correspondente Fato =.. Lista: conversão bi-direcional entre fato e lista, funtor sendo cabeça e argumentos sendo resto ?- name(A,"blabla"). A = blabla ?- name(blabla,S). S = "blabla" ?- list(X,"bla"). X = [98,108,97] ?- list([98,108,97],Y). Y = "bla” ?- p(a,X,c) =.. Y. X = _5, Y = [p,a,_5,c] ?- Y =.. [p,a,X,c]. Y = p(a,_20,c), X = _20

Prolog: entrada/saída 1 Ler/escrever estrutura de dados dificilmente pode ser visto como resultando de uma dedução: E/S não se integre naturalmente no paradigma de PL requer predicados extra-lógicos sem semântica declarativa em L1 Predicados built-in de Prolog para E/S: sempre verificados cumprem sua tarefa por efeitos colaterais não podem ser re-satisfeitos por backtracking

Prolog: entrada/saída 2 Ler e escrever termos: read, write, display. Ler e escrever caracteres: get, get0, put. Formatar a saída legívelmente: nl, tab. Ligar um canal de E/S com a tela ou com arquivos: tell, telling, told, see, seeing, seen . Carregar arquivo fonte no ambiente do interpretador: consult, reconsult ex.: ?- read(X), Z is X + 1, write(Z). 2. 3 X = 2, Z = 3; no ?

Prolog: meta-programação 1 assert(F)., assert((C :- P)).: sempre verificado; efeito colateral adiciona nova cláusula no fim do programa; F, P e C devem ser instanciados com uma estrutura de funtor especificado; não pode ser re-satisfeito por backtracking. variante asserta coloca novo fato no início do programa. retract(F), retract((C :- P)).: busca cláusula no programa se unificando com seu argumento; se encontrar um: responde yes, efeito colateral apaga cláusula encontrada do programa; caso contrário: falha sem efeito colateral; em caso de backtracking: busca o próxima cláusula do programa se unificando com seu argumento.

Prolog: meta-programação 2 assert/retract permitem: meta-programação raciocínio não monótono variáveis globais memoização caching de sub-deduções compartilhadas mas ao preço de: em geral perda da semântica declarativa em L1 perda da encapsulação das variáveis como argumentos de predicados sacrifício da legibilidade, facilidade de manutenção e re-utilização do código re-introdução de algumas limitações da programação imperativa

Prolog: failure-driven loop Loop gerada por backtracking forçado com fail e repeat. repeat sempre verificado e re-verificado no backtracking (true sempre verificado mas falha no backtracking) consult(File) :- see(File), consult-loop, seen. consult-loop :- repeat, read(Clause), process(Clause), !. process(X) :- end_of_file(X), !. process(Clause) :- assert(Clause), fail.

Prolog: manipulação de conjuntos (bagof e setof) Forçam backtracking e retornam todas as soluções de uma vez em uma lista Semântica declarativa apenas em L2 bagof(Termo,Objetivo,Resultado): busca todas as instanciações das variáveis comuns de Termo e Objetivo tal que Objetivo seja verificado unifica lista das instanciações de Termo assim obtidas com Resultado setof estende bagof por: descartar soluções duplicadas ordenar as restantes alfanumericamente

Prolog: exemplos de manipulação de conjuntos p(e,j). p(b,i). p(c,i). p(a,i). p(d,j). q(1,a). q(2,d). q(2,c). q(2,b). q(3,d). q(3,e). r(1,j). r(1,i). ^ permite especificar indiferença para uma variável de Objetivo ?- bagof(X,p(X,Y),L). X = _3, Y = j, L = [e,d] ; X = _3, Y = i, L = [b,c,a] ?- bagof(q(N,X),p(X,i),L). N = _4, X = _12, L = [q(_87,b),q(_73,c),q(_59,a)] ?- q(N,X), p(X,i), R = q(N,X). N = 1, X = a, R = q(1,a) ; N = 2, X = c, R = q(2,c) ; N = 2, X = b, R = q(2,b) ; no ?- bagof(r(1,Y),X^p(X,Y),L). Y = _6, X = _17, L = [r(1,j),r(1,i),r(1,i),r(1,i),r(1,j)] ? - setof(r(1,Y),X^p(X,Y),L). Y = _6, X = _17, L = [r(1,i),r(1,j)] ?-