Alguns fatos bem interessantes sobre LISP

 

John McCarthy: o papai do Lisp
John McCarthy: o "papi" do Lisp

LISP sempre me impressionou. Como algo como (defun fatorial (n) (if (<= n 1) 1 (* n (fatorial (- n 1))))) pode ser compreendido e, além de ser escrito por humanos, gerar programas de computador que realmente façam alguma coisa? Como alguém consegue entender isto? Quem programa em LISP é feliz? A resposta é: sim, e MUITO.

LISP sempre me fascinou por seu aspecto intelectual. Você realmente pensa mais (ou melhor, pensa de um modo radicalmente diferente) quando está programando nesta linguagem. Acha Ruby, Python e Groovy linguagens divertidas de se programar? Acredite: LISP é MUITO mais. Comecei a aprender LISP no curso de matemática discreta. Naquela época, enquanto aprendia recursividade, LISP se mostrou um laboratório extremamente útil para meu aprendizado. Porém, desde então, nunca fiz algo realmente útil com a linguagem. Até agora (mais sobre minhas experiências com Lisp em posts futuros)…

Este “não fazer nada de útil” com Lisp acabou aumentando a minha curiosidade a respeito de suas aplicações. Que bicho de fato é este tal de Lisp e em que é usado? No que ele é melhor do que outras linguagens e por que deveria me interessar por ele? E é aqui que entra minha lista de “fatos bem interessantes sobre Lisp”.

Para começar, Lisp não é mais apenas uma linguagem. Atualmente consiste em uma família de linguagens, todas inspiradas no Lisp original desenvolvido por John McCarthy em 1958. A propósito, Lisp foi a segunda linguagem de alto nível desenvolvida (a primeira foi FORTRAN), o que nos leva a ver o poder desta criatura: 50 anos depois ainda é usada (claro, sofreu diversas alterações neste período) em projetos de grande porte e, não satisfeita,  possui recursos que só recenemente começamos a ver aparecer em outras linguagens de programação.

Lisp nos trouxe algumas novidades bem interessantes:

 

  • Uso de condicionais: choque-se. Condicionais do tipo if-then-else só aparecem pela primeira vez no Lisp. Em FORTRAN este tipo de construtor ainda não existia. Até então, podia-se contar apenas com o abominável goto.
  • Garbage Colector. Achou que foi o Smalltalk que introduziu este recurso? Java? Nada… Lisp!
  • Recursividade. Lisp foi a primeira linguagem a implementar este conceito com sucesso.
  • O tipo de dados função. Em Lisp, funções são um tipo de dados assim como inteiros, booleanos ou strings. Você pode passar funções como parâmetros para outras funções ou mesmo armazená-las como variáveis. Incrível pensar que só recentemente, com o advento das closures é que este conceito começou a se tornar popular. 
  • Todas as variáveis são ponteiros. Não, não foi o Java que introduziu este conceito.
  • Uma sintaxe que até hoje é sem precedentes. Apesar de parecer complexa, a sintaxe do Lisp é a mais simples e eficaz que conheço: apenas parênteses representando listas e funções.
    Exemplo de lista em Lisp: (a b c d)
    Exemplo de função em lisp (+ a b)
    Ou então algo mais complexo: (+ (- b a) (* c d))
    Incrível pensar que só com isto sistemas inteiros são construídos.
  • A idéia de que é possível escrever programas de computador inteiramente compostos por funções.

 

E, acredito, não listei todas as novidades que o Lisp trouxe. Saindo das novidades, vamos pra os fatos:

  • O nome Lisp vêm de List Processor. Listas são a estrutura básica por trás da linguagem.
  • Não se trata de uma linguagem que adota apenas o paradigma funcional. Na realidade, os paradigmas orientado a objetos e procedural também estão presentes.
  • A primeira plataforma popular para desenvolvimento de lojas virtuais, a Viaweb (hoje Yahoo! Store), foi desenvolvida inteiramente em Lisp e, segundo um de seus criadores, Paul Graham (fanático por Lisp, diga-se de passagem), foi o principal fator para seu sucesso.
  • Por ser funcional, se adapta muito bem ao grande desafio dos programadores atuais: a programação paralela.
  • Usa cartão de crédito? Saiba que Lisp é uma das tecnologias mais utilizadas na detecção de fraudes.
  • Lisp é a principal linguagem usada em estudos de inteligência artificial (isto todo mundo sabe)
  • Desenvolvimento de aplicações em Lisp é rápido. Quer criar um protótipo rápido de sua aplicação? Em Lisp é possível. Isto porque, como é interpretada (pode ser compilada também), todas as alterações feitas por você automaticamente estarão disponíveis em seu ambiente de desenvolvimento. Consequentemente, o ciclo escreve-compila-testa vira apensa escreve-testa.
  • É considerada por muitos linguagem mais poderosa do mundo. Uma linha de código Lisp equivale em alguns casos a dezenas de linhas de código escrito em C/C++ ou Java. Quando você desenvolve algo em Lisp, após concluir seu trabalho, percebe-se que, mais do que um sistema, uma nova linguagem de programação foi criada.
    (a propósito, um fato escondido: é uma linguagem excelente para a criação de DSLs) 
  • Lisp não é um ermitão. Você pode usar OpenGL, ODBC, bibliotecas nativas, enfim, o que quiser
  • Muita gente usa Lisp.

Agora uma pergunta pode aparecer: “se Lisp  brilha no escuro como você está dizendo, por que então não está todo mundo programando em Lisp?”. Acredito que a popularidade só não é maior devido aos seguintes fatores:

  • As pessoas acham que Lisp é difícil sem nem ao menos tentar. Ao se depararem com um mundarel de parênteses, desesperam-se e correm desesperadas para algo com uma sintaxe próxima do C. Este mito cai por terra ao vermos quão simples é sua sintaxe.
  • A existência de vários dialetos que apresentam pequenas diferenças entre si: Alegro, Common Lisp, Arc, Mac Lisp, Scheme, etc.
  • Apesar de existirem bindings para práticamente todas as tecnologias em uso atualmente, não há um número grande de bibliotecas para, por exemplo, desenvolver aplicações web.
  • A falta de uma IDE realmente produtiva para a linguagem.

No entanto, se levarmos em consideração o número de linguagens inspiradas por Lisp (Java, Python, C#, Ruby, Perl, Smalltalk e muitas outras), percebemos que, na realidade, você pode até não conhecer Lisp, mas com certeza aqueles que criaram sua linguagem favorita quase que com certeza se inspiraram ao menos em parte nela.

A pergunta que se deve fazer no frigir dos ovos é: “vale a pena aprender Lisp?”. Minha resposta é: sim, e MUITO, mesmo que você jamais a use. Isto porquê trata-se de uma daquelas linguagens que realmente abre a nossa mente para outras possibilidades de programação. A partir do momento em que você toma conhecimento dos conceitos básicos por trás do Lisp, fica mais fácil entender de onde surgem estas “novidades” que vemos surgir recentemente, como closures, coletor de lixo, programação funcional e paralela, etc. Isto sem mencionar o determinismo linguístico, que é a maior tragédia que pode ocorrer a um programador (mas isto é assunto para um outro post).

O único problema em aprender Lisp é: uma vez aprendido, você sempre sentirá sua falta ao programar em qualquer outra linguagem.

 

Quer experimentar Lisp? 
Se quiser, é possível experimentá-lo online.
Ou então, melhor ainda: baixe o Common Lisp e experimente em seu computador.

9 comentários em “Alguns fatos bem interessantes sobre LISP”

  1. Sou estudante de CC, e enquanto estava procurando mais informações sobre Lisp encontrei esse link. Muito legal o texto, aprenderei Lisp agora.

    1. Que bom que gostou. Valeu.
      Cada minuto do aprendizado de Lisp vale à pena. Mesmo que você jamais escreva uma única linha de código (o que eu duvido) :)

      1. Victor Rodrigues

        Estou com uma dúvida em Lisp, neste exemplo: (CAR ‘((A 5 C) %)), o que o operador % faz?

  2. Linguagem fantástica, atualmente uso uma derivação, o AutoLisp…. realmente é muito pratics

  3. Não estou conseguindo entender um programa fatorial e fibonacci em lisp.
    Você poderia me ajudar a entender, por favor?

    fatorial:
    (defun fatorial(n)
    (if (<= n 1)
    1
    (* n (fatorial (-n 1)))
    )

    fibonacci:

    (defun fib(n)
    (if (= n 1)
    0
    (if (= n 2)
    1
    (+ (fib ( – n 1)) (fib (- n 2))))))

    O problema não está no if que não entendo, mas sim no else. Sempre que faço as contas, da um número diferente do que deveria dar. Qual a sequência de cálculo?

  4. Olá, boa noite!
    Meu nome é Abrantes e comecei há pouco um canal no YouTube com uma série de vídeos para aprender LISP através do livro “Common Lisp: A Gentle Introduction to Symbolic Computation”, de David D. Touretzky.
    Encontrei, via Google, este artigo em seu blog e achei que divulgar os vídeos de Lisp aqui pode ajudar mais pessoas a conhecer e aprender a linguagem. Se alguém tiver interesse, o endereço do canal no YouTube é: https://www.youtube.com/channel/UCvMmv1qKphatAWH7ZhW1tjg
    Obrigado!
    Abrantes

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Rolar para cima