domingo, 29 de julho de 2012

O que é


   Linguagem funcional é um paradigma de programação que trata a computação  como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções.
   Uma função, neste sentido, pode ter ou não ter parâmetros e um simples valor de retorno. Os parâmetros ou argumentos, como às vezes são chamados são os valores de entrada da função, e o valor de retorno é o resultado da função. A definição de uma função descreve Programação Funcional é um paradigma de programação que trata como a função será avaliada em termos de outras funções. Por exemplo, a função f(x) = x2 + 2 é definida em termos de funções de potenciação e adição. Do mesmo modo, a linguagem deve oferecer funções básicas que não requerem definições adicionais.
   Linguagens de programação funcionais, especialmente as puramente funcionais, tem sido mais usadas academicamente que no desenvolvimento comercial de software. Entretanto, algumas linguagens notáveis usadas na indústria e no comércio incluem Erlang (aplicações concorrentes), R(estatística), Mathematica(Matemática simbólica) J e K(análise financeira) e XSLT. Importantes influências na programação funcional foram o cálculo lambda, as linguagens de programação APL e Lisp , e mais recentemente ML.Haskell, OCalm e F#.



Para que serve


   Serve para descrever mecanismos abstratos. Têm como  objetivo a descrição e comunicação do utilizador ou programador para o computador. Com o passar dos anos as linguagens de programação vêm sendo criadas a partir dos defeitos de outras linguagens ou por simples melhoria de desempenho e algumas designadas apenas para alguma tarefa específica. Umas mais complexas que outras, mas todas com o mesmo fim, solucionar algum problema.


Como funciona


As funções podem ser manipuladas em uma grande variedade de formas em uma linguagem de programação funcional. As funções são tratadas como valores de primeira importância, o que é o mesmo que dizer que funções podem ser parâmetros ou valores de entrada para outras funções e podem ser os valores de retorno ou saída de uma função. Então podemos entender paradigma funcional como um mapeamento dos valores de entrada nos valores de retorno, através de funções. Isso permite que funções como mapcar em LISP e map em Haskell que tomam ambos uma função e uma lista como entrada e aplicam a função de entrada a cada elemento da lista. Funções podem ser nomeadas, como em outras linguagens, ou definidas anonimamente (algumas vezes durante a execução do programa) usando uma abstração lambda e usadas como valores em outras funções. Linguagens funcionais também permitem que funções sejam do tipo curry. Currying é uma técnica para reescrita de funções com múltiplos parâmetros como a composição de funções de um parâmetro. A função do tipocainda não são especificados. Esta nova função pode ser aplicada aos parâmetros restantes para obter o valor da função final. Por exemplo, uma função adiciona(x,y) = x + y pode ser do tipo curry de forma que o valor de retorno adiciona(2) — note que que não há um parâmetro y — será uma função anônima, o que é equivalente à função adiciona2(y) = 2 + y. Esta nova função tem apenas um parâmetro e corresponde a adicionar 2 a um número. Novamente, isso é apenas possível porque as funções são tratadas como valores de primeira importância.


Exemplos de linguagens que se enquadram nesse paradigma

Puro

Impure


[ edit ] Imperative languages



Exemplos de programas nessa linguagem


Direto no Console:

reverse “linguagens de programacao”

20*20

10^10

[1..100]

[2,4..100]

[1..]



Através de Scripts


1)
z = sq x / sq y
sq n = n * n
x = a + b
y = a - b
a = 10
b = 5

Ao solicitar o valor de “z”, o retorno será “9”

2)dias_uteis_da_semana = ["seg", "ter", "qua","qui", "sex"] dias_da_semana = dias_uteis_da_semana ++ ["sab", "dom"]

3)funcao :: Int -> Int
funcao x = x^2


4)divInt a b = if b == 0 then a else div a b
resto a b = if b /= 0 then a `mod` b else 0
soma x y = (+) x y
vogal a = if a=='a' || a=='e' || a=='i' || a=='o' ||a=='u'
    then True
    else False


5)comprimento l=length l
vazia []= True
vazia _ = False
primeiro :: [Int] -> Int
primeiro lista = head lista junta :: [Int] -> [Int] -> [Int] 
 junta lista1 lista2 = lista1 ++ lista2


6)vezes2 n = n * 2


7)main = do putStrLn "Hello World"

Referências

www.googleacademico.com/wikipedia

http://en.wikipedia.org/wiki/List_of_programming_languages_by_type