Paradigmas de Linguagens de Programação Paradigma Funcional Aula #10 (CopyLeft)2010 - Ismar Frango ismarfrango@gmail.com
Never had any mathematical conversations with anybody, because there was nobody else in my field.  Alonzo Church Paradigma...
Funções <ul><li>O conceito básico de função, na matemática, é o da aplicação dos elementos de um conjunto (domínio) em um ...
+ sobre funções <ul><li>Exemplo, a função  sqadd(x, y) = x*x + y*y  pode ser entendida como  x e y são mapeados para x*x+y...
Currying <ul><li>Cunhado por  Christopher Strachey  em 1967, o nome é uma referência ao matemático  Haskell Curry  – nada ...
First-class citizens: funções! “ First-class citizen ” é um termo também cunhado por Christopher Strachey, usado para indi...
Afinal, o que é um programa funcional? Um programa puramente funcional é uma  expressão  que caracteriza uma função matemá...
 O   -Cálculo Assim como a Máquina de Turing é o embasamento conceitual das linguagem imperativas,  o   -Cálculo é a ba...
 O   -Cálculo Alonzo Church e Alan Turing, em 1936, trabalharam sobre o  Entscheidungsproblem .  Enquanto Turing utiliza...
 O   -Cálculo .  O   -cálculo pode ser considerado como uma linguagem de programação abstrata, onde o conceito de  comp...
 O   -Cálculo .  Em   -cálculo, toda expressão pode ser escrita como uma função com um único argumento. Esse argumento,...
Regras do   -Cálculo Substituição : Todas as ocorrências de uma variável em uma expressão são trocadas por uma outra expr...
Regras do   -Cálculo Abstração : Recurso básico para codificar funções. Se F é uma expressão, então   X.F indica todos o...
Regras do   -Cálculo Aplicação : Indica a avaliação de uma função para um dado elementodo domínio. Se F é uma função e A ...
 (λ  x .  x  3) (λ  x .  x +2)         (λ  x .  x  + 2) 3          3 + 2  O   -Cálculo (λ  x . λ  y .  x  -  y ) 7 2  ...
 Aplicando o   -Cálculo Apesar do   -Cálculo ser a base do paradigma funcional, nem todas as linguagens que seguem esse...
Exemplo em Scheme ( define fatorial  ( lambda  (n)  if (= n 0)  1  ( * n  ( fatorial  ( - n 1 ) ) ) ) )
Redução “a priori”  [eager evaluation] (fatorial 3) 3*(fatorial 2) 3*2*(fatorial 1) 3*2*1*(fatorial 0) 3*2*1*1 3*2*1 3*2 6...
Redução “sob demanda”  [lazy evaluation] (fatorial 3) 3*(fatorial 2) 3*2*(fatorial 1) 6*1*(fatorial 0) 6*(fatorial 1) 6*(f...
Upcoming SlideShare
Loading in …5
×

Paradigmas de linguagens de programacao - aula#10

2,326 views

Published on

Paradigmas de linguagens de programacao
Aula #10
Prof. Ismar Frango

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,326
On SlideShare
0
From Embeds
0
Number of Embeds
56
Actions
Shares
0
Downloads
96
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Paradigmas de linguagens de programacao - aula#10

  1. 1. Paradigmas de Linguagens de Programação Paradigma Funcional Aula #10 (CopyLeft)2010 - Ismar Frango ismarfrango@gmail.com
  2. 2. Never had any mathematical conversations with anybody, because there was nobody else in my field.  Alonzo Church Paradigma Funcional Enquanto o embasamento fundamental do paradigma imperativo é a arquitetura de Von Neumann , a base para o paradigma funcional é o conceito de função matemática, fundamento primário do Cálculo Lambda, desenvolvido inicialmente por Alonzo Church nos anos 1930 कार्यात्मक प्रतिमान
  3. 3. Funções <ul><li>O conceito básico de função, na matemática, é o da aplicação dos elementos de um conjunto (domínio) em um outro conjunto (imagem) </li></ul><ul><li>O Cálculo-  traz uma formalização na especificação de funções, da seguinte maneira: </li></ul><ul><li>cube (x) = x * x * x </li></ul><ul><li>É uma função que pode ser escrita como:  x.x*x*x </li></ul><ul><li>Diz-se que (  x.x*x*x)2 é uma aplicação dessa função para 2, que reduz em 8 </li></ul>
  4. 4. + sobre funções <ul><li>Exemplo, a função sqadd(x, y) = x*x + y*y pode ser entendida como x e y são mapeados para x*x+y*y , o que leva a algumas constatações: </li></ul><ul><li>Funções não precisam necessariamente ter nome. </li></ul><ul><li>A escolha dos nomes dos parâmetros para uma função é irrelevante. </li></ul><ul><li>Uma função que requer dois argumentos pode ser remapeada para uma função que requer um argumento e que se reduz em outra função que requer um outro argumento ( currying ): </li></ul><ul><li> xy. x*x + y*y   x(  y. x*x + y*y) </li></ul>
  5. 5. Currying <ul><li>Cunhado por Christopher Strachey em 1967, o nome é uma referência ao matemático Haskell Curry – nada a ver com o tempero. </li></ul><ul><li>Currying é uma técnica de transformação de uma função que recebe múltiplos parâmetros (mais especificamente, uma n-upla como parâmetro) de forma que ela pode ser chamada como uma cadeia de funções que recebem somente um parâmetro cada. </li></ul>
  6. 6. First-class citizens: funções! “ First-class citizen ” é um termo também cunhado por Christopher Strachey, usado para indicar o elemento de um determinado paradigma que pode ser passado como parâmetro, retornado ou atribuído. No caso do paradigma funcional, as funções são as cidadãs de primeira classe. Este conceito está relacionado com o conceito de reificação . Informally, reification is often referred to as &quot;making something a first-class citizen&quot; within the scope of a particular system ( Wikipedia )
  7. 7. Afinal, o que é um programa funcional? Um programa puramente funcional é uma expressão que caracteriza uma função matemática, juntamente com um elemento do domínio daquela função. A execução de um programa funcional é um processo que determina quais elementos da imagem da função correspondem aos elementos do domínio fornecidos. Esse processo se dá por meio de transformações sucessivas do programa ( reduções ), que convergem para o resultado desejado.
  8. 8.  O  -Cálculo Assim como a Máquina de Turing é o embasamento conceitual das linguagem imperativas, o  -Cálculo é a base do paradigma funcional . O  -Cálculo é um sistema formal projetado para representar a definição, aplicação e a recursão de funções.
  9. 9.  O  -Cálculo Alonzo Church e Alan Turing, em 1936, trabalharam sobre o Entscheidungsproblem . Enquanto Turing utilizava seu próprio modelo para provar computabilidade, Church utilizava-se do  -Cálculo. Was ist das? Church demonstrou que não existe algoritmo capaz de provar que duas expressões do  -Cálculo são equivalentes. Ele trabalhou também no problema equivalente ao problema da parada da Máquina de Turing.
  10. 10.  O  -Cálculo . O  -cálculo pode ser considerado como uma linguagem de programação abstrata, onde o conceito de computação , isto é, as maneiras como funções podem ser combinadas para formar outras funções, aparece em toda sua generalidade e de uma forma “pura”', despida de complicações sintáticas. A principal característica do  -cálculo é tratar funções como “cidadãos de primeira classe”, isto é, entidades que podem ser, como um dado qualquer, utilizadas como argumentos e retornadas como valores de outras funções
  11. 11.  O  -Cálculo . Em  -cálculo, toda expressão pode ser escrita como uma função com um único argumento. Esse argumento, por sua vez, é uma outra função com um argumento. O valor da função é outra função com um único argumento.
  12. 12. Regras do  -Cálculo Substituição : Todas as ocorrências de uma variável em uma expressão são trocadas por uma outra expressão. Se F e G são expressões, F[X  G] significa a troca de todas as ocorrências de X em F pela expressão G. Exemplo: Seja F a expressão X+5. Logo, F[X  4] = 4+5 !
  13. 13. Regras do  -Cálculo Abstração : Recurso básico para codificar funções. Se F é uma expressão, então  X.F indica todos os valores que X pode assumir para as substituições em F. Exemplo: Seja F a expressão X+5. Logo,  X.(X+5) indica a função matemática, com todas as possibilidades de ocorrências de X. !
  14. 14. Regras do  -Cálculo Aplicação : Indica a avaliação de uma função para um dado elementodo domínio. Se F é uma função e A um elemento do domínio, (F)A indica o valor de F em A. Exemplo: A aplicação (  X.(X+5))4 particulariza a expressão  X.(X+5) para X=4. Um sistema de reduções irá produzir a seqüência de expressões (  X.(X+5))4  4+5  9. !
  15. 15.  (λ x . x 3) (λ x . x +2)        (λ x . x + 2) 3       3 + 2 O  -Cálculo (λ x . λ y . x - y ) 7 2        (λ y . 7 - y ) 2        7 - 2 Exemplos de funções equivalentes em  -Cálculo (justamente o que não é computável): Uma função é definida de maneira anônima por uma  -expressão. Por exemplo, a função “incremento” f(x) = x+1 seria expressa em l-cálculo como   x . x + 1 . O número f (3) seria escrito como  (  x . x + 1) 3 .
  16. 16.  Aplicando o  -Cálculo Apesar do  -Cálculo ser a base do paradigma funcional, nem todas as linguagens que seguem esse paradigma são estritamente baseadas no  -Cálculo, apesar de seguirem a sintaxe do  -Cálculo. O LISP original, por exemplo, baseava-se na sintaxe do  -Cálculo, mas não na noção restrita da substituição. Atualmente, Scheme, SML e Common Lisp (e seus dialetos, como CLOS ), são implementações do  -Cálculo.
  17. 17. Exemplo em Scheme ( define fatorial ( lambda (n) if (= n 0) 1 ( * n ( fatorial ( - n 1 ) ) ) ) )
  18. 18. Redução “a priori” [eager evaluation] (fatorial 3) 3*(fatorial 2) 3*2*(fatorial 1) 3*2*1*(fatorial 0) 3*2*1*1 3*2*1 3*2 6 Scheme, LISP, ML, SML, CLOS... $ $
  19. 19. Redução “sob demanda” [lazy evaluation] (fatorial 3) 3*(fatorial 2) 3*2*(fatorial 1) 6*1*(fatorial 0) 6*(fatorial 1) 6*(fatorial 0) 6*1 6 Haskell, LazyML Z Z Z

×