Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Cálculo Lâmbda (l – Calculus)
João Bosco da Mota Alves Programação Funcional INE/CTC/UFSC Junho/2001
2
João Bosco da Mota Alves
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 [ ] where f x = x*x + 3 * x + 1 INE/CTC/UFSC João Bosco da Mota Alves
3
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 INE/CTC/UFSC João Bosco da Mota Alves
4
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] INE/CTC/UFSC João Bosco da Mota Alves
5
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)) '( )) ( ) INE/CTC/UFSC 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 INE/CTC/UFSC João Bosco da Mota Alves
7
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 INE/CTC/UFSC João Bosco da Mota Alves
8
João Bosco da Mota Alves
l – Calculus Então f(x) 3 = (3 + 1)2 = 16 INE/CTC/UFSC João Bosco da Mota Alves
9
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 INE/CTC/UFSC João Bosco da Mota Alves
10
João Bosco da Mota Alves
l – Calculus Então f(x,y) 3 5 = (2*3*5) = 38 INE/CTC/UFSC João Bosco da Mota Alves
11
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 = (6*5) = 38 INE/CTC/UFSC João Bosco da Mota Alves
12
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 INE/CTC/UFSC João Bosco da Mota Alves
13
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 + y + z Þ f(2,y,z) 5 4 Þ z Þ f(2,5,z) 4 Þ Þ 11 INE/CTC/UFSC João Bosco da Mota Alves
14
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 INE/CTC/UFSC João Bosco da Mota Alves
15
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 Î L e v Î V, então (lv.E) Î L (Abstração lâmbda) INE/CTC/UFSC João Bosco da Mota Alves
16
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 INE/CTC/UFSC João Bosco da Mota Alves
17
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 INE/CTC/UFSC João Bosco da Mota Alves
18
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 INE/CTC/UFSC João Bosco da Mota Alves
19
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)) INE/CTC/UFSC João Bosco da Mota Alves
20
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 INE/CTC/UFSC 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)) Þ ? INE/CTC/UFSC João Bosco da Mota Alves
22
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))) INE/CTC/UFSC João Bosco da Mota Alves
23
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) INE/CTC/UFSC João Bosco da Mota Alves
24
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 adiciona x a 3 INE/CTC/UFSC João Bosco da Mota Alves
25
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 INE/CTC/UFSC João Bosco da Mota Alves
26
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 adiciona x a y INE/CTC/UFSC João Bosco da Mota Alves
27
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 INE/CTC/UFSC João Bosco da Mota Alves
28
Regras de conversão em l – 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) INE/CTC/UFSC João Bosco da Mota Alves
29
Regras de conversão em l – 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 INE/CTC/UFSC João Bosco da Mota Alves
30
Regras de conversão em l – 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? INE/CTC/UFSC João Bosco da Mota Alves
31
Regras de conversão em l – 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 INE/CTC/UFSC João Bosco da Mota Alves
32
João Bosco da Mota Alves
Redex Função identidade como l-expressão (lx. x) 2 = 2 (lx. x) p = p Ou mesmo, INE/CTC/UFSC João Bosco da Mota Alves
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.