320 likes | 422 Views
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
E N D
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 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
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
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
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
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
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
l – Calculus • Então f(x) 3 = (3 + 1)2 = 16 João Bosco da Mota Alves
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
l – Calculus • Então f(x,y) 3 5 = 3 + 5 + (2*3*5) = 38 João Bosco da Mota Alves
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Redex • Função identidade como l-expressão (lx. x) 2 = 2 (lx. x) p = p • Ou mesmo, João Bosco da Mota Alves