Escolar Documentos
Profissional Documentos
Cultura Documentos
Programacao Funcional
Programacao Funcional
Programacao Funcional
LINGUAGEM DE PROGRAMAO I
Raimundo Alan F. Moreira, Antnio Victor C. Passos, Otavio R. Neto, Jos Almeida Jnior.
Resumo. Pretendemos neste artigo mostra como surgiu o estilo de programao funcional,
para que usada, o conceito desse modo de programao, os contrastes com a
programao imperativa, sua aplicao no desenvolvimento de softwares e as vantagens e
desvantagem de se trabalhar com o paradigma funcional.
Abstract. We intend in this article shows how did the functional programming style, that is
used, the concept of this mode, the contrast with imperative programming, its application in
software development and the advantages and disadvantages of working with the functional
paradigm.
1. Introduo
O clculo lambda um modelo de computao projetado por Alonzo Church nos anos
1930 que oferece um modo muito formal de descrever um clculo de uma funo, embora
no tenha sido criada para computador foi o alicerce para a programao funcional. A
primeira linguagem com esse paradigma foi LISP projetada pro Jhon MacCarthy no MIT no
fim dos anos 1950. A partir dai surgem outras LPs funcionais como ML, Miranda, Scheme,
Haskell, etc. Nas LPs estritamente funcionais no h alocao explicita de memria nem de
declarao de variveis, pois essa operao ocorre automaticamente quando a funo
invocada.
Nesse trabalho mostraremos os dados histricos, paradigma funcional, contraste com a
programao imperativa, universo de aplicao, uso prtico, trabalhando com a
programao funcional e sua aplicao prtica, vantagens e desvantagens de se trabalhar
com o paradigma funcional.
2. Dados histricos
Nos anos 40 os primeiros computadores foram construdos. Nesta poca devido aos altos
custos, era justificvel ter uma linguagem que trabalhasse o mais prximo possvel da
arquitetura do computador, ou seja, as primeiras linguagens de programao tinham como
abstrao o prprio hardware.
Como sabemos, um computador consiste de uma unidade de processamento e memria,
ento um programa era composto por instrues que modificavam a memria, executados
pela unidade de processamento. Linguagens como C e Pascal foram marcados por esse
estilo, chamado de programao imperativa, onde havia uma serie de atribuies executadas
seqencialmente.
No entanto antes de existirem computadores, as pessoas resolviam problemas de outras
formas. A principal delas, atravs da matemtica pura. Na matemtica, pelo menos nos
ltimos 400 anos, funes tem desempenhado um papel central. Funes representam a
conexo entre parmetros de entrada e o resultado de sada de um determinado processo.
Em uma funo determinstica o resultado depende apenas dos seus parmetros. Logo uma
funo uma excelente forma de se especificar uma computao. Esta a base do estilo de
programao funcional.
O clculo lambda pode ser considerado a primeira linguagem de programao funcional,
embora nunca tenha sido projetada para ser realmente executada em um computador. um
modelo de computao projetado por Alonzo Church nos anos 1930 que oferece um modo
muito formal de descrever um clculo de uma funo. A primeira linguagem de
programao funcional criada para computadores foi LISP, desenvolvida por Jhon
McCarthy no Instituto de Tecnologias de Massachusetts (MIT) no fim dos anos 1950.
Mesmo no sendo uma linguagem de programao puramente funcional, LISP introduziu a
maioria das caractersticas hoje encontradas nas modernas linguagens de programao
funcional. Scheme foi uma tentativa posterior de simplificar e melhorar LISP. Nos anos
1970 a linguagem ML foi criada pela Universidade de Edimburgo, e David Tumer
desenvolveu a linguagem Miranda na Universidade de Kent. A linguagem Haskell foi
lanada no fim dos anos 1980 em uma tentativa de juntar muitas idias na pesquisa de
programao funcional.
3. Paradigma funcional
5. Universo de aplicao
6. Usos prticos
> 29
29
O computador ento devolve o nmero 29, pois ele uma expresso em sua forma mais
simples, no podendo sofrer um processo de avaliao.
Uma expresso mais complexa seria:
>5 * 3
15
No script acima duas funes, square e somaEmult foram definidas. A funo square toma
um valor x e o multiplica por ele mesmo. A funo somaEmult devolve a soma de seus
argumentos multiplicada por 3. Nota-se que as funes foram definidas atravs de equaes
e que uma definio pode ser considerada como uma definio lgica de como a funo se
comporta. Em outras palavras, uma definio funcional pode ser vista como uma
especificao do problema.
Tendo criado scripts pode-se us-los em uma avaliao no computador.
Exemplos:
> square (2 + 3)
25
> somaEmult 1 2
9
> square (somaEmult 2 4)
324
O objetivo de uma definio ligar um nome a um valor. No script anterior, por exemplo,
o nome square associado a uma funo que eleva um valor ao quadrado.
8. Aplicao prtica.
Recursiva:
int fatorial(int n)
{
if(n <= 1)
return 1;
return n * fatorial(n - 1);
}
Interativa:
int fatorial(int n)
{
int r = 1;
while(n > 1)
r *= n--;
return r;
}
int total = 0;
for (i = 1; i <= 100; i++)
total = total + 1;
A mesma varivel(total) muda de valor 100 vezes durante a operao (efeito colateral)
s1_100:: integer
s1_100 = sum [1..100]
Programao funcional permite a codificao com menos potencial para erros, pois cada
componente completamente isolado. Alm disso, a recursividade usado em funes de
primeira-classe permite que as provas para correo sejam mais simples do que
normalmente espelhar a estrutura do cdigo.
Algumas das vantagens da programao funcional incluem o fato de que os programas
funcionais so mais curtos, e mais fceis de modificar (porque no h efeitos ocultos global
a ter em conta).
Manipulao mais simples de programas, boa legibilidade.
No permitir efeitos colaterais em funes, a linguagem oferece transparncia referencial
Modularidade, um conceito onde o sistema ou software divido em partes distintas.
Compe ferramentas necessrio para um programa mais legvel com uma melhor
manuteno e melhor desempenho por meio da programao.
11. Concluso
Com esse artigo podemos nos familiarizar com a programao funcional, vendo que a
mesma tem sido mais usada para pesquisas acadmicas que para a produo de software.
Percebemos que a programao funcional envolve escrever cdigos que no muda de
estado, que no h uma alocao de memria nem de variveis explicita. Foi observado que
este tipo de programao tem um menor potencial para erros, devido ser completamente
isolado cada componente, mas seu consumo de memria muito alto na maioria da
linguagem de programao funcional.
12. Referncias
[1] http://pt.wikipedia.org/wiki/Programao_funcional
[2] http://pt.wikipedia.org/wiki/Clculo_lombda
[3] http://www.cin.ufpe.br/~mrsl/PLC/02-Introducao_Haskell.pdf
[4] http://www.inf.ufrgs.br/gppd/disc/cmp134/trabs/T1/991/ProgFunc/pf.html
[5] Varejo, Flvio Miguel. Linguagens de programao: Java, C e C e outras : conceitos e
tcnicas. Rio de Janeiro: Elsevier, 2004
[6] |Valena, Jos Manuel; Barros, Jos Bernardo, Fundamentos da Computao, Livro II:
Programao Funcional. Universidade Aberta, 1999.
[7] http://informacaocomdiversao.blogspot.com/2009/02/paradigma-funcional.html
[8] http://pt.scribd.com/doc/45211091/Apostila-Lisp