Linguagens funcionais

Eu ouvia falar com certa freqüência das tais linguagens funcionais e tinha decidido que eu devia aprender uma delas pra ver se era tudo isso mesmo.

Eu já tinha lido algumas coisas sobre Lisp e Scheme, mas não conseguia captar a essência da coisa. Me parecia simplesmente uma linguagem com notação prefixada e muitos, mas muitos parênteses mesmo! E também gostavam de usar recursão!

Um tempo depois, acabei entrando em contato com a linguagem Lua e aprendi muita coisa com ela (muita coisa mesmo!). Por exemplo, aprendi o que é “tratar funções como valores de primeira classe”, pois é possível criar funções com simples atribuições: my_func = function()…end. Com isso também é possível redefinir funções, passá-las como parâmetros e retornar funções. Esse último caso é interessante porque eu já tinha visto em Scheme, mas não tinha entendido muito bem por causa da sintaxe. Em Scheme não existe a palavra-chave return (ela é implícita no final de funções) e uma função anônima é definida com a esquisita palavra lambda. Em Lua é muito mais simples: return function()…end. Assim eu finalmente entendi o funcionamento dos closures: funções retornadas pra fora do seu escopo (léxico) e que continuam podendo acessar as mesmas variáveis de antes, mesmo depois do retorno da função que criou tais variáveis (portanto, elas precisam ser movidas pra fora da pilha, mas isso é um detalhe de implementação). E com tail-recursion aprendi que um comando return f() pode ser pensado como um simples goto f() porque não é necessário manter o stack frame da função que faz o return.

Alguns mistérios resolvidos sobre linguagens funcionais por causa da linguagem Lua! Já deve ter acontecido com você de aprender alguma coisa numa linguagem e então passar a entender melhor outra linguagem que você achava que já conhecia, né? Mas eu ainda queria aprender mais um pouco. Tentei ver de novo Lisp e Scheme, mas fora algumas poucas coisas, eu já não estava mais interessado nelas. Então resolvi procurar outras linguagens e dei uma olhada em Haskell. Aprendi conceitos legais, que nunca tinha visto antes, como currying, mas não cheguei a usar a linguagem: me assustei com toda essa “pureza funcional” (se bem que era exatamente isso que eu estava procurando no começo), separando a parte funcional da parte de entrada e saída (fazer debugging com prints deve ser meio incômodo, se não impossível). Deixei pra lá e fui aprender Python. Mas fiquei com outra linguagem na cabeça: OCaml, por ser funcional mas com recursos imperativos e segundo vários saites ela compila pra código nativo bastante eficiente! Quando encontrei um programa interessante em OCaml, resolvi dar uma estudada melhor pra aprender a criar extensões… (continua num próximo post, provavelmente).

Anúncios

4 pensamentos sobre “Linguagens funcionais

  1. oi pessoal eu to fazendo um trabalho e to procurando sobre linguagem funcional relacionado a informática.

    mas eu procurei sobre linguagem funcional mas n achei nda.

    alguem pode me dizer o q eh linguagem funcional?

    flw
    ^^

  2. Acho que a linguagem Lisp oferece um recurso bastante interessante com relação às linguagens que você já estudou: as macros. Existem na linguagem C, através de diretivas de pré-processamento define, mas em Lisp a coisa tem uma dimensão bem maior.

    Att.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s