1 / 32

Cálculo Lâmbda ( l – Calculus)

Cálculo Lâmbda ( l – Calculus). João Bosco da Mota Alves Programação Funcional INE/CTC/UFSC Junho/2001. Notação Lâmbda. Às vezes, precisa-se definir pequenas funções, sem dar-lhes nomes Exemplo Calcular x 2 +3x+1, para x Î [1..100] Claro, é possível usar-se Ys = map f [1 .. 100] where

arnie
Download Presentation

Cálculo Lâmbda ( l – Calculus)

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. Cálculo Lâmbda(l – Calculus) João Bosco da Mota Alves Programação Funcional INE/CTC/UFSC Junho/2001

  2. Notação Lâmbda • Às vezes, precisa-se definir pequenas funções, sem dar-lhes nomes • Exemplo • Calcular x2+3x+1, para x Î[1..100] • Claro, é possível usar-se Ys = map f [1 .. 100] where f x = x*x + 3 * x + 1 João Bosco da Mota Alves

  3. Notação Lâmbda • Há uma notação (l-notation) que cria função sem dar-lhe nome, \padrão -> expressão • Conhecida como Notação Lâmbda • O símbolo \ é o mais parecido com l • Então \x -> x*x + 3*x + 1 João Bosco da Mota Alves

  4. Notação Lâmbda • Lê-se, \x -> x*x + 3*x + 1, como “a função que, dado o argumento x, calcula o valor x*x + 3*x + 1” • Muito usada para a passagem de função como parâmetro; exemplo ys = map (\x -> x*x + 3*x + 1) [1 .. x] João Bosco da Mota Alves

  5. Notação Lâmbda • Em XLISPWIN > #' (lambda (x) (+ x 3)) #<Closure: #484facad> > (funcall * 5) 8 > (mapcar #' (lambda (x) (+ x 2)) '(1 2 3 4 5)) (3 4 5 6 7) João Bosco da Mota Alves

  6. l – Calculus consiste de • Uma linguagem, a notação – l • Que nos dá expressões lâmbda • E regras • Para simplificar e manipular essas expressões lâmbda • Precisamos, então, aprender tanto a linguagem quanto as regras João Bosco da Mota Alves

  7. l – Calculus • Suponha que f : R -> R seja definida por f(x) = (x + 1)2 • Uma função de uma variável, f(x) • f(a), para um a específico, é obtido substituindo-se, por a, todas as ocorrências de x • Também, f(x) a, aplicação de f(x) a a João Bosco da Mota Alves

  8. l – Calculus • Então f(x) 3 = (3 + 1)2 = 16 João Bosco da Mota Alves

  9. l – Calculus • Suponha, agora, f : R´R -> R, definida por f(x,y) = x + y + (2*x*y) • Aqui, f é um par de nos reais, (x,y) • Dizemos que f é uma função de duas variáveis, x e y • f(a,b) pode ser obtido substituindo-se por a e b as ocorrências de x e y, resp João Bosco da Mota Alves

  10. l – Calculus • Então f(x,y) 3 5 = 3 + 5 + (2*3*5) = 38 João Bosco da Mota Alves

  11. l – Calculus • Entretanto, há outra forma de se pensar a aplicação de função • Ao invés de aplicar-se às duas variáveis simultaneamente, aplica-se à apenas uma de cada vez • Primeiro, f(x,y) 3 = 3 + y + (6*y) = g(y) • Depois g(y) 5 = 3 + 5 + (6*5) = 38 João Bosco da Mota Alves

  12. l – Calculus • É sempre possível transformar uma função de n variáveis em uma função de (n – 1) variáveis, aplicando-a para um valor de um de seus argumentos • Esta importante técnica é conhecida como currying • E é usada na aplicação de função em cálculo lâmbda João Bosco da Mota Alves

  13. l – Calculus • Seja, f : R´R ´R -> R, definida por f(x,y,z) = x + y + z • Computando f(2,5,4) f(x,y,z) 2 5 4 Þ 2 + y + z Þ f(2,y,z) 5 4 Þ 2 + 5 + z Þ f(2,5,z) 4 Þ 2 + 5 + 4 Þ 11 João Bosco da Mota Alves

  14. l – Calculus • A notação lâmbda é uma linguagem de primeira ordem, com • Conjunto de nomes de variáveis, V • Conjunto de constantes pré-definidas, C • Átomo • Todo membro de V e de C é um átomo • Ex.: 2, ana João Bosco da Mota Alves

  15. l – Calculus • Expressão lâmbda, L, é definida por • Cláusula Básica • Todo átomo pertence a L • Cláusula Indutiva • Se E1, E2 ÎL, então (E1 E2) ÎL (Regra de aplicação: E1, operador; E2, operando) • Se EÎLe vÎ V, então (lv.E) ÎL (Abstração lâmbda) João Bosco da Mota Alves

  16. l – Calculus • Cláusula Extrema • Uma expressão não é uma expressão lâmbda a menos que possa ser mostrada pertencer a L, pela aplicação das cláusulas básica e indutiva, em um número finito de vezes João Bosco da Mota Alves

  17. l – Calculus • Na meta-linguagem BNF <exp> ::= <constante> | <variável> | (<exp> <exp>) aplicação | (l <variável> <exp>) l-abstração João Bosco da Mota Alves

  18. l – Calculus • Ex.: x, z2, 2, 3 e +, são expressões lâmbda que são átomos, pois x, z2 Î V 2, 3, +Î C João Bosco da Mota Alves

  19. l – Calculus • Como x e 2 são expressões lâmbda, então também o são (pela regra da aplicação) (x 2) ((x 2) 2) (x (2 2)) João Bosco da Mota Alves

  20. l – Calculus • Para eliminar parênteses, pode-se estabelecer convenções • Associação à esquerda, por exemplo E1 E2 E3 = (E1 E2 E3) = ((E1 E2) E3) Note que (E1 (E2 E3)) ¹ E1 E2 E3 João Bosco da Mota Alves

  21. Simplificações (l – Calculus) • ((+ x) y) Þ + x y • (((+ x) y) z) Þ + x y z • ((x (3 (z 5))) 4) Þ x (3 (z 5)) 4 • (x (((3 z) 5) 4)) Þ ? João Bosco da Mota Alves

  22. l – Calculus • O poder expressivo do cálculo lâmbda, vem das expressões lâmbda geradas pelo uso da regra de aplicação • Exemplo de abstrações lâmbda • (l x. 2) • (l x. (+ x 3)) • (l x. x) • (l x. (l y. (+ x y))) João Bosco da Mota Alves

  23. l – Calculus • A variável v de uma abstração lâmbda lv. E é chamada de parâmetro formal • A expressão E é chamada de corpo da expressão lâmbda • Também podemos ter variáveis livres • A variável y, abaixo, é livre; x, não • lv. (+ x y) João Bosco da Mota Alves

  24. l – Calculus • Informalmente, a proposta de uma abstração lâmbda lv. E é fazer uma função de um argumento, v, a partir de uma expressão lâmbda E • A função, propriamente dita é o corpo • A expressão lâmbda lx. (+ x 3) é lida como a função de x que adicionax a 3 João Bosco da Mota Alves

  25. l – Calculus • Abstração lâmbda tem associação à esquerda lx. ly. E = lx. (ly. E) = (lx. (ly. E)) lx. ly. (+ x y) 2 = (lx. (ly. (+ x y) 2)) ¹ (lx. ly. (+ x y)) 2 João Bosco da Mota Alves

  26. l – Calculus • Já a l-expressão lx. ly. (+ x y) é lida como a função de x que é a função de y que adicionax a y João Bosco da Mota Alves

  27. l – Calculus • Seja lx. (+ x 3) • Trocando-se x por y, obtem-se a mesma função ly. (+ y 3) • Se aplicada a 5, as duas avaliam 8 • lx. (+ x 3) 5 = ly. (+ y 3) 5 = 8 • Precisa-se de regras de conversão que mostre a equivalência entre l-exp João Bosco da Mota Alves

  28. Regras de conversão eml – Calculus • a-conversão • Uma variável vinculada pode ser consistentemente renomeada, em uma l-expression, se não houver ocorrência livre da mesma lx. (+ x 3) renomeada para ly. (+ y 3) lx. (+ x y) renomeada para lz. (+ z y) Mas não lx. (+ x y) para ly. (+ y y) João Bosco da Mota Alves

  29. Regras de conversão eml – Calculus • b-conversão • A l-expression (lx. E) E’, pode ser reduzida pela substituição, por E’, em todas as ocorrências de x no corpo E, desde que E’ não tenha ocorrência livre da mesma (lx. (+ x 5) 3) reduzida para (+ 3 5) = 8 (lx. ly. (+ x y)) 3 5 para (+ 3 5) = 8 João Bosco da Mota Alves

  30. Regras de conversão eml – Calculus (lx. ly. (+ x y)) 3 5 Þ ((lx. (ly. (+ x y))) 3) 5 Þ (ly. (+ 3 y)) 5 Þ(+ 3 5) Þ8 • Viu como a expressão lâmbda tem associação à esquerda? João Bosco da Mota Alves

  31. Regras de conversão eml – Calculus • A expressão redex significa reducible expression, ou expressão redutível • Uma forma normal de redução surge quando se usa a associação à esquerda • Ex.: faça por associação à esquerda e à direita, e veja que o resultado é 11 (lx. ly. (+ x y (ly. (+ z 1)) 3)) 2 5 João Bosco da Mota Alves

  32. Redex • Função identidade como l-expressão (lx. x) 2 = 2 (lx. x) p = p • Ou mesmo, João Bosco da Mota Alves

More Related