Aug 23, 2007
Lisp e parênteses
As pessoas sempre reclamam da quantidade de parênteses em Lisp. Contudo elas falham em perceber que outras linguagens tem tantos elementos sintáticos quanto lisp, ou até mais, só que como eles são diferentes entre si ficam "espalhados" pelo código não dando uma sensação tão presente como os parênteses de Lisp. Como um exemplo simples, comparemos uma função simples e não otimizada para calcular números de fibonacci em Pascal e em Common Lisp: O código em Pascal:
function fib(N : integer) : integer;
begin
if N < 2 then
fib := N;
else
fib := fib (N - 1) + fib (N - 2);
end;
O código em Lisp:
(defun fib (n)
(if (< n 2)
n
(+ (fib (- n 1))
(fib (- n 2)))))
A primeira vista o código em Lisp parece mais "poluído", com inúmeros
parênteses, né? Bom, se excluirmos todas as coisas que o código em
Pascal tem em comum com o código em Lisp (por exemplo,
function é equivalente a defun, if,
+, e - tem em ambos, etc) deixamos somente os
elementos sintáticos que Pascal tem mas Lisp não precisa, teremos algo
como:
: integer : integer ; begin then fib := else fib := ; end;Ou seja, 15 elementos sintáticos. Por outro lado, se fizermos o mesmo com Lisp, isso é, tirarmos tudo que o código Lisp tem em comum com o código em Pascal, vamos terminar com isso:
( (() (()())))ou seja, um total de 12 elementos sintáticos. Não apenas o código em Lisp tem menos elementos sintáticos, como eles são uniformes (apenas parênteses), enquanto o código em Pascal tem vários elementos diferentes que o programador tem que se lembrar. Esse é um ponto-chave ao se programar em Lisp; na superfície parece que a linguagem é inundada de parênteses, mas no fundo, o número de elementos sintáticos é o mesmo, ou até menor, que a maioria das linguagens. Com a vantagem de que os elementos sintáticos usados são mais uniformes (apenas parênteses), enquanto que outras linguagens usam diversas coisas como parênteses, virgulas, pontos, colchetes, etc.
Posted at 14:05