1 / 26

Life

Life. Leonardo Lemos (lal). &. Paulo Oliva (pbo). de predicados: Como em Prolog: fail. conjunção (A,B). disjunção (A;B). Diferente de Prolog: succeed (em Prolog, true). de funções: disjunção {A;B}. Cut (!): como Prolog exceto com disjunção de funcões.

kostya
Télécharger la présentation

Life

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. Life Leonardo Lemos (lal) & Paulo Oliva (pbo)

  2. de predicados: Como em Prolog: fail.conjunção (A,B). disjunção (A;B). Diferente de Prolog:succeed (em Prolog, true). de funções: disjunção {A;B}. Cut (!): como Prolog exceto com disjunção de funcões. grandparent(X,Z) :- parent(X,Y), parent(Y,Z). pessoa(X) :- mulher(X); homem(X). A = {1;2;3;4}A=1, A=2, A=3 ou A=4. P(A) :- !, write(A).P(X:{1;2;3})?123 Q(A:{1;2;3}) :- !, write(A).Q(X)?1 Controle de Fluxo

  3. Condicionador cond(B,T,F)Ex.: abs(V:real) -> cond(V>=0,V,-V). Tal que <expressão> | <predicado> função call_once(P) Tente provar P: se P é verificado devolve true se P falha devolve false Ponte entre funções e predicados Ap3([ ],L,R) -> true | R=L. Ap3([X|L1],L2,R) -> true | R=[X|L3], Ap3(L1,L2,L3). call_once(person(John)). Controle de Fluxo

  4. Funções Aritméticas Binárias Soma (A+B) Diferença (A-B, -A) Produto (A*B) Divisão (A/B) Parte inteira da divisão (A//B) fatorial em Prologfat(0, 1).fat(N, R) :- N1 is N - 1, fat(N1, A), R is N * A. fatorial em LIFEfat(0) ->1.fat(N) -> N * fat(N - 1). Cálculos Aritméticos

  5. Funções Aritméticas bit a bit. E lógico de A com B, A / \ B. Ou lógico de A com B, A \ / B. Right Shift de A, B vezes, A >> B. Left Shift de A, B vezes, A << B. Negação de A, (\A). 12 /\ 5 = 41100 /\ 0101 = 0100 12 \/ 5 = 131100 \/ 0101 = 1101 12 >> 1 = 61100 >> 1 = 0110 12 << 1 = 2401100 << 1 = 11000 \12 = 3 \...001100 = ...110011 Cálculos Aritméticos

  6. Funções Aritméticas Unárias. Maior inteiro menor ou igual a A, floor(A). Menor inteiro maior igual a A, ceiling(A). Raiz quadrada de A, sqrt(A). e elevado a A, exp(A). Logarítmo na base 10, log(A). Seno, Cosseno e Tangente sin(A), cos(A), tan(A). floor(4.5) = 4.0 ceiling(4.5) = 5.0 sqrt(4.0) = 2.0 exp(1) = 2.7189... log(100) = 2 sin(3.1415) = 0.0 sin(1.57) = 1.0 Cálculos Aritméticos

  7. Gerador de números aleatórios initrandom(S:Real) random(N:Int) genint initrandom(10). random(30)?4 random(30)?23 random(30)?4 genint?234 genint?931 Cálculos Aritméticos

  8. Maior (A>B) Maior igual (A>=B) Menor (A<B) Menor igual (A<=B) Igualdade (A=:=B) Diferença (A=\=B) > maior2(X) :- X > 2. > maior2(A)? *** Yes A = real~. --1> A = 3? *** Yes A = 3. ----2> *** No A = real~. --1> Comparação Aritmética

  9. E (A and B) Ou (A or B) Ou exclusivo (A xor B) Não existem em Prolog Negação (not A) Lógica, não por falha. > person1(X) -> man(X) or woman(X). true/false > person2(X) -> man(X); woman(X). succeed/fail Aritmética Booleana

  10. Exemplos: greater_lower_bound glb(c,d) = {a;b} least_upper_bound lub(a,b) = {c;d} parents(a) = {c;d} parents(c) = [@] children(c) = {a;b} children(a) = [ ] subsort(a,a) = true subsort(a,a(b=>2)) = true least_sorts = {a;b} @ c d a b {} Cálculo de Sorts

  11. Maior (c:>d = false) Maior igual (c:>=c = true) Menor (b:<d = true) Menor igual (b:<=d = true) Igual na hierarquia dos sorts (a:==a = true) Se os sorts são comparáveis (a:><d = true) @ c d a b {} Comparação de Sorts

  12. @ c d a b {} Comparação de Sorts • Não maior (c:\>d = true) • Não maior igual (c:\>=c = false) • Não menor (b\:<d = false) • Não menor igual (b:\<=d = false) • Não igual na hierarquia dos sorts (a:\==a = false) • Se os sorts não são comparáveis (a:\><d = false)

  13. É tratada como um sort e usa menos mémoria que termos . Tamanho da string, strlen(“abcdef”) = 6. Parte de string, substr(“abcdef”,5, 2) = “ef”. Concatenarstrcon(“abc”, “def”) = “abcdef”. Código ASCII de S, asc(S:String). Carácter do código ASCII, chr(I:Int). Transforma a string em um termo .str2psi(“foo”) = foo Inverso de str2psi, psi2str(X). psi2str(int) = “int” Cálculo de Strings

  14. Maior (A$>B) Maior igual (A$>=B) Menor (A$<B) Menor igual (A$=<B) Igual (A$= =B) Não igual (A$\= =B) “aba” $> “bab”?false “a” $< “aa”?true “jaca” $== ”caja”?false Comparação de Strings

  15. ap1([ ], L) -> L ap1([X|L1], L2) -> [X|ap1(L1,L2)] ap2 ([ ],L,L).ap2 ([X|L1],L2,[X|L3]) :- ap2(L1,L2,L3). is_function(ap1). True. is_predicate(ap1). False. is_sort(ap2). False. Se X é um @ sem argumentos: var(X) Se X não é @ ou tem argumentos: nonvar(X) Se X é um termo persistente: is_persistent(X) Verificação de Tipo

  16. Variável lógica cujo nome é visível em todo o programa. (módulo) Devem ser declaradas. Comporta-se com um parâmetro extra passado para todos os predicados, funções e conjuntos. Não contribuem para a manutenção do programa Usadas para rastrear programas sem usar parâmetros extras. > global (warfare)? % declarar variável gb. *** yes > warfare=34? % unificar com 34 *** yes --1> write (warfare)? % escrever o valor 34 *** yes ----2> . > write (warfare)? % backtracking desfaz @ % a unificação *** yes Variáveis globais

  17. Termos e variáveis persistentes • Termos Persistentes • É um termo  que não muda o valor no backtracking. • São termos apenas de leitura que só pode ser modificado por chamadas explícitas por atribuições não-backtracking (<<-) • Um termo persistente pode ser armazenado em uma variável padrão. • Toda interação entre termos locais e termos persistentes é feita através de matching. Unificar dois termos persistentes gera erro. • Variável Persistente: • É um termo persistente armazenado em uma variável global. • O valor nunca fica inacessível. • Tem que ser declaradas. • Atualmente não diferencia entre variáveis persistentes e globais

  18. Exemplo de Variável Persistente > global (trouble)? *** yes > trouble<<-with_harry? *** yes --1> write (trouble)? with_harry *** yes ----2> . > write (trouble)? @ *** yes > persistent (trouble)? *** yes > trouble<<-with_harry? *** yes --1> write (trouble)? with_harry *** yes ----2> . > write (trouble)? with_harry *** yes

  19. Atribuição destrutiva Life provê uma integração limpa de atribuições destrutivas. Utiliza dois tipos de termos: normais e persistentes. Dois tipos de atribuições destrutivas: Atribuição destrutiva backtrackable X sobrepõe Y. Backtracking recupera os valores originais de X. (X <- Y) > X=5, (X<-6;X<-7;succeed), write(X), nl, fail? 6 7 5 *** No Atribuição Destrutiva

  20. X sobrepõe Y. Backtracking não recupera os valores originais de X. (X <<- Y) > X=5? *** yes X = 5. --1> X <<- 10? *** yes X = 10. ----2> X <<- 20? *** yes X = 20? ------3> *** no X = 20. ----2> X = 5. Atribuição Destrutiva não-Backtrackable

  21. Notação popular de gramática: Backus-Naur Form, BNF, para a linguagem anbn<s> ::= a b<s> ::= a <s> b Notação DCG (definite clause grammar)s --> [a], [b].s --> [a], s, [b]. Diretamente utilizável para os processamentos morfológico e sintático na interpretação de LN (parsing) Também utilizado para os processamentos semântico e pragmático na interpretação de LN. Noção de Difference List[1,2,3] = [1,2,3,4] - [4][x] = [x|A] - A[a,b,c,d] = [a,b,c,d] - [ ] Gramáticas de Cláusulas Definidas (GCD)

  22. f(T,F) :- sn(T,R), gv(R, F). f(T,F) :- sn(T,R1), gv(R1,R2), sn(R2,F). sn(T,F) :- nome(T,F). sn(T,F) :- det(T,R), subs(R,F). gv(R,F) :- v(T,F). v([come|F],F). v([canta|F],F). subs([pera|F],F). nome([ana|F],F). det([pera|F],F). F --> SN, GV. F --> SN, GV, SN. SN --> Nome SN --> Det, Subs. GV --> V. V --> [come]. V --> [canta]. Nome --> [ana]. Subs --> [pera]. Det --> [a]. Conversão de GCD para Prolog

  23. f(T,F) :- sn(T,R), gv(R, F). f(T,F) :- sn(T,R1), gv(R1,R2), sn(R2,F). sn(T,F) :- nome(T,F). sn(T,F) :- det(T,R), subs(R,F). gv(R,F) :- v(T,F). v([come|F],F). v([canta|F],F). subs([pera|F],F). nome([ana|F],F). det([pera|F],F). Parsing Bottom-Up com GCDs f([Ana,come,a,pera],[]) sn gv sn nome v det subs ana come a pera

  24. ? f([ana,come,a,pera],[]).1) 0 CALL: f([ana,come,a,pera][]) ? 2) 1 CALL: sn([ana,come,a,pera],_72) ? 3) 2 CALL: nome([ana,come,a,pera],_72) ? 4) 3 CALL: C(ana,[ana,come,a,pera],_72) {dec10} ? 4) 3 EXIT: C(ana, [ana,come,a,pera],[come,a,pera]) 3) 2 EXIT: nome([ana,come,a,pera],[come,a,pera]) 2) 1 EXIT: sn([ana,come,a,pera],[come,a,pera]) 5) 1 CALL: gv([come,a,pera],[]) ? 6) 2 CALL: v([come,a,pera],[])? 7) 3 CALL: C(come,[come,a,pera],[]) {dec10} ? 7) 3 FAIL: C(come,[come,a,pera],[]) 8) 3 CALL: C(canta,[come,a,pera],[]) {dec10} ? .... Rastreamento do Parsing...

  25. GCDf(Num, Gen) --> sn(Num, Gen), gv(Num, Gen). PROLOG f(T, F, Num, Gen) :- sn(T,R,Num,Gen), gv(R,F,Num,Gen). ?- f(Num,Gen,[ana,come,as, peras], []).Num = sing, Gen = femMore(y/n)? Nyes?- f(Num,Gen,[ana,come,as, pera], []).no?- f(Num,Gen,[as,peras,come, ana], []).no Utilização de Restrições com Argumentos

  26. That’s all folks!!

More Related