Feb 26, 2007
Pretty lambdas
Um recurso interessante do emacs é a capacidade de mostrar um texto de
maneira diferente do que foi escrito. Um exemplo óbvio disso é para
mostrar versões WYSIWYG de documentos de marcação como o LaTeX. Outro
uso interessante é para mostrar o caractere lambda no lugar do nome
"lambda". Por exemplo, se eu digitar a função abaixo:
no momento que eu terminar de digitar "lambda", o emacs vai mostrar o
caractere lambda no lugar. Isso é útil para deixar o código mais limpo
e ocupar menos espaço.
Tudo o que é preciso fazer é usar a função pretty-lambdas abaixo:
(defun pretty-lambdas ()
(font-lock-add-keywords
nil `(("(\\(lambda\\>\\)"
(0 (progn (compose-region (match-beginning 1) (match-end 1)
,(make-char 'greek-iso8859-7 107))
nil))))))
E "conectar" essa função com os modos desejados:
(add-hook 'emacs-lisp-mode-hook 'pretty-lambdas) (add-hook 'lisp-mode-hook 'pretty-lambdas)
Posted at 16:13
Feb 14, 2007
Lisp Não é Uma Linguagem de Programação Funcional.
Repita comigo: Lisp não é uma linguagem de programação funcional. Novamente: Lisp não é uma linguagem de programação funcional. Uma última vez: Lisp não é uma linguagem de programação funcional.
Acho que agora posso começar o artigo :-)
Primeiramente, Lisp não é uma linguagem. O termo "Lisp" se refere a uma família de linguagens. Nos anos 80 iniciou-se um esforço para padronizar os diversos dialetos de Lisp que existiam como Maclisp, Interlisp, Zetalisp, entre outros. Esse esforço resultou no Common Lisp, que é definido pelo padrão ANSI. Hoje em dia existem três dialetos principais: Common Lisp, Scheme, e Emacs Lisp, sendo que os dois primeiros são usados para programação geral e o último como linguagem de extensão para o Emacs.
Sim, o criador do Lisp, John McCarthy, incorporou diversas idéias do cálculo lambda na linguagem. Isso não é surpreendente, já que McCarthy foi aluno do Alonzo Church (o criador do cálculo lambda). Mas isso foi no final dos anos 50! Nesse meio-tempo (ou deveria dizer meio século?) diversos paradigmas de programação foram incorporados nos mais diversos dialetos de Lisp. Na verdade, não só esses paradigmas foram incorporados como Lisp foi usado como inspiração ou veículo de pesquisa para trabalhos chaves como o Smalltalk. Mas isso é conversa para outro post.
O ponto chave desse post é que Common Lisp tem suporte integrado para os mais diversos tipos de paradigmas como funcional, imperativo, aspectos, além de ter um dos mais avançados sistemas de programação a objetos. Então dá para imaginar minha surpresa quando eu envio o texto abaixo para divulgar o II Encontro Lisp-br no FISL 8.0:
Lisp abrange uma família de linguagens como Common Lisp e Scheme. Lisp é uma linguagem multi-paradigma com diversos recursos e abstrações para programação funcional, procedural, imperativa, aspectos, um sistema avançado e flexível de programação orientada a objetos, e um carater dinâmico sem precedentes.E eles publicam no lugar o seguinte texto:
O Lisp é uma família de linguagem de programação funcional, sendo que as mais conhecidas são Common Lisp e Scheme.Pô, eu sei que as vezes tem que cortar o texto para ficar menor, mas que tal colocar:
O Lisp é uma família de linguagem de programação multi-paradigma, sendo que as mais conhecidas são Common Lisp e Scheme.Seria muito mais fiel com o texto que eu enviei e com a verdade. Segundo o Mario Goulart (do Lisp-br) esse não é um caso isolado. Esse tipo de coisa já aconteceu com ele. Porque as pessoas tem dificuldade em aceitar que Common Lisp e Scheme são linguagens multi-paradigma?
Na verdade você fazer programas puramente funcionais com Lisp (como eu faço), ou usar apenas classes e objetos sem nenhum recurso funcional. Ou ainda, você pode usar um estilo de programação do tipo fluxograma (com algo semelhante ao GOTO com esteróides e tudo), útil para estudar e testar os algoritmos do The Art of Computer Programming (TAOCP). A propósito, antes de fazer cara feia para o GOTO, você já leu o clássico Structured Programming with Goto Statements do Knuth?
O livro Practical Common Lisp (ou PCL para os íntimos) é uma excelente referência para quem quer saber mais sobre Common Lisp e como usar os diversos paradigmas, como programação orientada a objetos.
Posted at 00:05