Linguagens de programação Funcional
O projeto das linguagens imperativas é baseado diretamente na arquitetura de computadores von Neumann.
– Eficiência é a principal preocupação, em vez da adequação da linguagem para desenvolvimento de software.
• O projeto das linguagens funcionais é baseado em funções matemáticas.
– Uma sólida base teórica, também próxima do usuário, mas relativamente despreocupada com a arquitetura das máquinas em que os programas serão executados.
Funções matemáticas
• Uma função matemática é um mapeamento de membros de um conjunto, chamado de conjunto domínio, para outro conjunto, chamado de conjunto imagem.
Expressões lambda
• Expressões lambda descrevem funções sem nome
• São aplicadas aos parâmetros colocando-se os parâmetros depois da expressão por exemplo, ((x) x * x * x)(2) que resulta no valor 8.
Formas funcionais
• Uma função de ordem superior, ou forma funcional, é uma função que recebe funções como parâmetros ou uma que leva a uma função como resultado, ou ambos.
Composição de funções
• É uma forma funcional que tem dois parâmetros funcionais ou leva a uma função cujo valor é o primeiro parâmetro de função real aplicado ao resultado do segundo.
Fundamentos das linguagens de programação funcional
• O objetivo do projeto de uma linguagem de programação funcional é mimetizar funções matemáticas ao máximo possível.
• A abordagem para a solução de problemas é fundamentalmente diferente de abordagens usadas com linguagens imperativas
– Em uma linguagem imperativa, as operações são realizadas e os resultados são armazenados em variáveis para uso posterior.
– Gestão das variáveis é uma preocupação constante e uma fonte de complexidade para a programação imperativa .
• Em uma linguagem de programação funcional, variáveis não são necessárias, como é o caso da matemática.
Avaliação
• Os parâmetros são avaliados, em nenhuma ordem especial
• Os valores dos parâmetros são substituídos no corpo da função
•