1 / 14

Prolog: Predicados Built-in 2

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): =:=, ==, <, >, =<, >=

calandra
Download Presentation

Prolog: Predicados Built-in 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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ávelisExpressã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 Jacques Robin (DI-UFPE)

  3. > ?- 1 + 1 < 1 + 2. yes > ?- 1 + 3 =:= 2 + 2. yes > ?- 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. A = 2 B = 1 > ?- 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). no > ?- -1+2 =:= +(-(1),2). yes Prolog: exemplos de aritmética 1 Jacques Robin (DI-UFPE)

  4. 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: exemplos de aritmética 2 Jacques Robin (DI-UFPE)

  5. Prolog: teste de tipos • semântica declarativa de var fora de L1 Jacques Robin (DI-UFPE)

  6. ?- var(X). X = _3 ?- var(2). no ?- var(a). no ?- var(p(a,X)). no ?- nonvar(2), nonvar(p(2,X,a)). X = _11 ?- X is 2 + 3, var(X). no ?- 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: exemplos de teste de tipos Jacques Robin (DI-UFPE)

  7. 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: conversão de tipos Jacques Robin (DI-UFPE)

  8. 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 Jacques Robin (DI-UFPE)

  9. 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 ? Jacques Robin (DI-UFPE)

  10. assert(F)., assert((P :- C)).: 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((P :- C)).: 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 1 Jacques Robin (DI-UFPE)

  11. assert/retract permitem: meta-programação raciocínio não monótono variáveis globais memoização caching de sub-deduções compartilhadas masao 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: meta-programação 2 Jacques Robin (DI-UFPE)

  12. 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. Jacques Robin (DI-UFPE)

  13. 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 Jacques Robin (DI-UFPE)

  14. 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)] ?- Prolog: exemplos de manipulação de conjuntos Jacques Robin (DI-UFPE)

More Related