





















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Coleção completa de exercícios resolvidos em haskell
Tipologia: Exercícios
1 / 29
Esta página não é visível na pré-visualização
Não perca as partes importantes!






















Programação Funcional Bacharelado em Sistemas de Informação Maio - 2009
Professor em Princeton, EUA (1929–1967) e UCLA (1967–1990) Inventou um sistema formal, chamado λ-calculus ( Lambda Cálculo) , e definiu a noção de função computável utilizando este sistema. O Lambda Cálculo pode ser chamado “a menor linguagem de programação universal” do mundo. As linguagens de programação funcionais, como Lisp, Miranda, ML, Haskell são baseadas no Lambda Cálculo.
Uma abstração lambda é um tipo de expressão que denota uma função: (λx. + x 1) O λ determina que existe uma função, e é imediatamente seguido por uma variável, denominada parâmetro formal da função. (λ x. + x 1) A função de x que incrementa x de 1
( λ x. + x y) 4 Para avaliar completamente a expressão, é necessário conhecer o valor global de y. Para x, a variável é local e pertence à função. Exemplos: λ x. + ((λ y. + y z) 7) x // z é livre
( λ x. + x 1) 4 → + 4 1
(λ f. f 3) (λ x. + x 1) → (λ x. + x 1) 3 → + 3 1 → 4
( λ x. + x 1) ( λ y. + y 1) Claramente as duas abstrações acima são equivalentes e uma α -conversão nos permite mudar o nome do parâmetro formal de uma abstração lambda. Então:
α
η
( λ x. + 1 x) (+ 1) Ambas tem o mesmo comportamento quando aplicadas à argumento: adicionam 1 ao argumento. Uma η− redução é uma regra expressando tal equiva- lência:
α− conversão (renomeação) λ x. e ↔ λ y. e Quando y não é uma variável livre em e. β− redução (aplicação) (λ x. e 1 ) e2 → [ e^2 /x ] e^1 Operações de renomeação e substituição. η− conversão λ x. e x → e^ Elimina uma abstração λ mais complexa.
Exemplo : Área de um círculo F ≡ π * r 2 , r ∈ N Q ≡ x * x , x ∈ N H = F (^) ° Q (função composta) H(r) = 3,14 * Q(r) (Fortran)
Em Haskell: Main> (\y -> pi * y * y) 3 28.
Dada uma função f, defina uma expressão f Օ f:
(λf. λx. f (f x)) (λy. y+1) = λx. (λy. y+1) ((λy. y+1) x) = λx. (λy. y+1) (x+1) = λx. (x+1)+
t = \x -> \y -> x f = \x -> \y -> y pair = \x -> \y -> \z -> z x y first = \p -> p t second = \p -> p f Main> first (pair 1 2) 1 Main> first (second (pair 1 (pair 2 3))) 2