O que é o Lisp

O Lisp e uma das linguagens de programação mais antigas ainda em uso ativo. Criada por John McCarthy em 1958 no MIT, Lisp foi pioneira em conceitos que hoje são fundamentais em linguagens modernas: funções de primeira classe, recursao, garbage collection e o modelo de código como dados (homoiconicidade).

Em 2026, Lisp ainda atrai atenção da comunidade de desenvolvedores. Um artigo publicado recentemente no blog Scotto.me e que chegou a primeira página do Hacker News traz a perspectiva de um dev moderno descobrindo as razoes por trás da durabilidade da linguagem e do que ela oferece que outras linguagens ainda não replicaram completamente.

Para devs acostumados com Python, JavaScript ou Rust, Lisp parece exótica. Mas entender os conceitos por trás da linguagem explica muito sobre como as linguagens modernas evoluíram e por que certos paradigmas ainda não foram totalmente absorvidos pelo mainstream.

Como o Lisp funciona

A característica mais marcante do Lisp e a sintaxe baseada em s-expressions (expressões simbólicas). Todo o código e representado como listas aninhadas entre parênteses. Não ha distinção sintática entre código e dados, o que é chamado de homoiconicidade.

Isso significa que você pode tratar código como dados, manipular código em runtime e criar novas sintaxes através do sistema de macros. O sistema de macros do Lisp e fundamentalmente diferente dos macros de C ou da maioria das linguagens: em Lisp, um macro recebe código Lisp como entrada e retorna código Lisp como saída, executado em tempo de compilação.

Diferentes dialetos de Lisp surgiram ao longo das décadas. Os mais conhecidos hoje são Common Lisp (padrão ANSI de 1994), Scheme (minimalista, muito usado no ensino), Clojure (Lisp moderno rodando na JVM e JavaScript) e Emacs Lisp (o Lisp que controla o editor Emacs).

💡
Dica

Clojure e o dialeto mais acessível para devs modernos: roda na JVM, tem interoperabilidade com Java e o ecossistema Maven, e tem uma comunidade ativa com ferramentas modernas de build e teste.

Por que Lisp ainda importa

A pergunta mais comum sobre Lisp e: se a linguagem e de 1958, por que aprender ela hoje? Existem varias razoes validas:

  • Macros de verdade: o sistema de macros do Lisp permite criar abstrações que nenhuma outra linguagem popular replica fielmente. Rust tem macros procedurias, mas são mais complexas e limitadas. Júlia tem homoiconicidade inspirada no Lisp.
  • REPL orientado ao desenvolvimento: o ciclo de desenvolvimento com REPL no Lisp e diferente do REPL do Python ou Node.js. Você pode redefinir funções em runtime, inspecionar o estado do programa e modificar código sem reiniciar a aplicação.
  • Influencia histórica: Python tem list comprehensions inspiradas no Lisp. JavaScript tem closures e funções de primeira classe diretamente do Lisp. MapReduce da Google foi inspirado em operações de Lisp. Entender Lisp explica de onde vieram essas ideias.
  • Pensamento diferente: aprender Lisp muda a forma como você pensa sobre abstração, recursao e transformação de dados, independente de você usar Lisp em produção.
Atenção

Lisp não e uma boa escolha para o primeiro projeto de uma startup ou para substituir sua linguagem principal amanha. O valor e educativo e, para casos específicos como Clojure, prático em contextos específicos.

Como começar: Common Lisp e Clojure

Para quem quer experimentar Lisp hoje, duas opcoes práticas:

# Common Lisp via SBCL (Steel Bank Common Lisp)
# macOS:
brew install sbcl

# Linux (Debian/Ubuntu):
sudo apt install sbcl

# Iniciar REPL:
sbcl

# Primeiro programa:
(defun hello (nome)
  (format t "Ola, ~a!~%" nome))
(hello "mundo")
# Clojure via Leiningen
# macOS:
brew install leiningen

# Criar projeto:
lein new app meu-projeto
cd meu-projeto
lein repl

# No REPL:
(println "Ola, mundo!")
(map inc [1 2 3 4 5])  ; => (2 3 4 5 6)
🚀
Pro tip

Para aprender Lisp de forma progressiva, o livro Practical Common Lisp de Peter Seibel esta disponível gratuitamente online em practicalcommonlisp.com. E o melhor ponto de partida para devs com experiência em outras linguagens.

Exemplo prático: macros em Lisp

O exemplo mais clássico para mostrar o poder dos macros e criar uma nova estrutura de controle. Em Python ou JavaScript, você não pode adicionar um novo tipo de if. Em Lisp, você pode:

; Definindo um macro "when" que só executa se a condição for verdadeira
(defmacro my-when (condição &body corpo)
  `(if ,condição
       (progn ,@corpo)
       nil))

; Usando o macro como se fosse uma keyword nativa:
(my-when (> x 10)
  (format t "x e maior que 10~%")
  (incrementar-contador))

O macro recebe o código como dados (a lista Lisp) e retorna código transformado. Isso e executado em tempo de compilação, não em runtime. O resultado e zero overhead e a possibilidade de criar novas abstrações que se comportam como parte da linguagem.

Em linguagens modernas, isso seria equivalente a criar um novo bloco de controle de fluxo que o compilador entende nativamente, o que não e possível em Python, Java ou Go.

Comparação com linguagens funcionais modernas

Varias linguagens modernas foram influenciadas pelo Lisp sem ser Lisp. Como elas se comparam:

  • Lisp vs Haskell: Haskell tem sistema de tipos estático poderoso que Lisp não tem. Lisp e mais dinâmico e tem sistema de macros superior. Haskell tem comunidade maior no Brasil hoje.
  • Lisp vs Clojure: Clojure e Lisp moderno. Se você quer usar Lisp em produção na JVM, Clojure e a escolha mais prática. Mais comunidade, mais ferramentas, interop com Java.
  • Lisp vs Elixir: Elixir e inspirado em Ruby e Erlang, não em Lisp, mas compartilha o interesse em programação funcional. Elixir tem muito mais adoção no mercado.
  • Lisp vs Python funcional: Python tem funções de primeira classe e algumas features funcionais, mas não tem macros. Para programação funcional no Python, você trabalha dentro das limitações da linguagem.

Pontos positivos e limitações

Pontos positivos: sistema de macros único que permite abstrações impossíveis em outras linguagens. REPL interativo que muda o ciclo de desenvolvimento. Influencia histórica que ajuda a entender de onde vem as linguagens modernas. Clojure como opcao prática na JVM.

Limitações reais: comunidade pequena no Brasil. Menos bibliotecas e frameworks que Python ou JavaScript. Mercado de trabalho limitado para Common Lisp. A sintaxe baseada em parênteses pode ser desorientadora no inicio.

🔴
Cuidado

Não adote Lisp para um projeto de equipe sem garantir que todos os membros da equipe tenham interesse e tempo para aprender. A curva de aprendizado e real e o mercado de devs Lisp e pequeno.

Casos de uso reais

Onde Lisp e seus dialetos fazem sentido hoje:

  • Clojure para sistemas de dados: empresas como Nubank e outras fintechs usam Clojure para sistemas de processamento de dados onde a imutabilidade por padrão e concorrência são vantagens reais.
  • Emacs Lisp para customização do Emacs: se você e usuário de Emacs, aprender Emacs Lisp e praticamente obrigatório para customizações além do básico.
  • Common Lisp em sistemas legados: alguns sistemas corporativos antigos, especialmente em finanças, ainda rodam Common Lisp em produção.
  • Aprendizado e pesquisa: Scheme e muito usado em cursos de ciência da computação para ensinar conceitos fundamentais sem a complexidade de linguagens mainstream.

Dicas e boas práticas

💡
Dica

Se você quer aprender Lisp para entender programação funcional, comece com Clojure. Tem mais material em português e inglês, ferramentas modernas e e aplicável em projetos reais na JVM.

💡
Dica

Use Paredit ou Parinfer no seu editor para editar Lisp. Essas ferramentas mantém os parênteses balanceados automaticamente e tornam a edição muito mais confortável do que sem elas.

🚀
Pro tip

O livro Structure and Interpretation of Computer Programs (SICP) do MIT usa Scheme para ensinar ciência da computação. Esta disponível gratuitamente online. E considerado um dos melhores livros de programação já escritos.

Atenção

Não confunda a curva de aprendizado inicial com a experiência de longo prazo. Devs que usam Lisp regularmente reportam que a sintaxe se torna natural e que a falta de parênteses em outras linguagens e o que parece estranho depois.

Vale a pena aprender Lisp?

Para aprender conceitos fundamentais: definitivamente sim. Lisp expõe diretamente os princípios de funções de primeira classe, recursao, transformação de dados e macros que influenciam todas as linguagens modernas. Aprender Lisp vai mudar como você pensa sobre programação.

Para uso em produção: depende. Clojure e uma opcao prática para equipes que querem programação funcional na JVM. Common Lisp tem uso em nichos específicos. Para a maioria dos projetos web e mobile, ha opcoes com mais ecossistema.

O próximo passo: instale o SBCL ou configure um projeto Clojure, abra um REPL e passe algumas horas explorando. A melhor forma de entender o que Lisp tem de especial e ver o sistema de macros funcionando.