cálculo lâmbda ( – calculus) joão bosco da mota alves programação funcional ine/ctc/ufsc...
TRANSCRIPT
Cálculo Lâmbda( – Calculus)
João Bosco da Mota AlvesProgramação Funcional
INE/CTC/UFSCJunho/2001
INE/CTC/UFSC João Bosco da Mota Alves 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
INE/CTC/UFSC João Bosco da Mota Alves 3
Notação Lâmbda Há uma notação (-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 Então
\x -> x*x + 3*x + 1
INE/CTC/UFSC 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; exemploys = map (\x -> x*x + 3*x + 1) [1 .. x]
INE/CTC/UFSC 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)
INE/CTC/UFSC João Bosco da Mota Alves 6
– Calculus consiste de Uma linguagem, a notação –
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
– 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
– Calculus Então
f(x) 3 = (3 + 1)2 = 16
INE/CTC/UFSC João Bosco da Mota Alves 9
– Calculus Suponha, agora, f : RR -> 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
– Calculus Então
f(x,y) 3 5 = 3 + 5 + (2*3*5) = 38
INE/CTC/UFSC João Bosco da Mota Alves 11
– 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
INE/CTC/UFSC João Bosco da Mota Alves 12
– 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
– Calculus Seja, f : RR 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
INE/CTC/UFSC João Bosco da Mota Alves 14
– 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
– Calculus Expressão lâmbda, , é definida por Cláusula Básica
Todo átomo pertence a Cláusula Indutiva
Se E1, E2 , então (E1 E2) (Regra de aplicação: E1, operador; E2, operando)
Se E e v V, então (v.E) (Abstração lâmbda)
INE/CTC/UFSC João Bosco da Mota Alves 16
– Calculus Cláusula Extrema
Uma expressão não é uma expressão lâmbda a menos que possa ser mostrada pertencer a , 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
– Calculus Na meta-linguagem BNF<exp> ::= <constante> | <variável> | (<exp> <exp>)
aplicação | ( <variável> <exp>)
abstração
INE/CTC/UFSC João Bosco da Mota Alves 18
– Calculus Ex.: x, z2, 2, 3 e +, são expressões
lâmbda que são átomos, pois
x, z2 V2, 3, + C
INE/CTC/UFSC João Bosco da Mota Alves 19
– 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
– 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 ( – 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
– 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 ( x. 2) ( x. (+ x 3)) ( x. x) ( x. ( y. (+ x y)))
INE/CTC/UFSC João Bosco da Mota Alves 23
– Calculus A variável v de uma abstração lâmbda
v. 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
v. (+ x y)
INE/CTC/UFSC João Bosco da Mota Alves 24
– Calculus Informalmente, a proposta de uma
abstração lâmbda v. 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 x. (+ x 3) é lida
como a função de x que adiciona x a 3
INE/CTC/UFSC João Bosco da Mota Alves 25
– Calculus Abstração lâmbda tem associação à
esquerdax. y. E=x. (y. E)= (x. (y. E))x. y. (+ x y) 2=(x. (y. (+ x y) 2)) (x. y. (+ x y)) 2
INE/CTC/UFSC João Bosco da Mota Alves 26
– Calculus Já a -expressão x. y. (+ 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
– Calculus Seja x. (+ x 3) Trocando-se x por y, obtem-se a
mesma função y. (+ y 3) Se aplicada a 5, as duas avaliam 8 x. (+ x 3) 5 = y. (+ y 3) 5 = 8 Precisa-se de regras de conversão
que mostre a equivalência entre -exp
INE/CTC/UFSC João Bosco da Mota Alves 28
Regras de conversão em – Calculus -conversão Uma variável vinculada pode ser
consistentemente renomeada, em uma -expression, se não houver ocorrência livre da mesma
x. (+ x 3) renomeada para y. (+ y 3)x. (+ x y) renomeada para z. (+ z y)Mas não x. (+ x y) para y. (+ y y)
INE/CTC/UFSC João Bosco da Mota Alves 29
Regras de conversão em – Calculus -conversão
A -expression (x. 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
x. (+ x 5) 3) reduzida para (+ 3 5) = 8
x. y. (+ x y)) 3 5 para (+ 3 5) = 8
INE/CTC/UFSC João Bosco da Mota Alves 30
Regras de conversão em – Calculusx. y. (+ x y)) 3 5x. (y. (+ x y))) 3) 5y. (+ 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 – 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 é 11x. y. (+ x y (y. (+ z 1)) 3)) 2 5
INE/CTC/UFSC João Bosco da Mota Alves 32
Redex Função identidade como -
expressãox. x) 2 = 2x. x) = Ou mesmo,
5132
5132).( xx