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).
Tags: Linguagens de programação, linguagens funcionais, Lisp, Lua, OCaml, Scheme
22 Janeiro, 2008 às 13:33 |
E Lua subiu 30 posições em 2007
6 Maio, 2008 às 14:10 |
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
^^