Ir para o conteúdo principal
BiografiaHistória da informáticaIniciante

John McCarthy: Lisp e a ideia de programar com símbolos

Como John McCarthy concebeu Lisp para representar o raciocínio, transformando listas, recursão e o próprio código em objetos manipuláveis.

Publicado 24 de agosto de 2026Leitura : 5 minPor Yann Bastien
Retrato de John McCarthy em Stanford em 2006
Mostrar índice
  1. Representar raciocínio, não apenas números
  2. Porque as listas se tornaram centrais
  3. Quando código e dados têm a mesma forma
  4. Automatizar uma memória dinâmica
  5. Uma linguagem construída por uma comunidade
  6. O time-sharing muda a relação com a máquina
  7. O que Lisp transmitiu às linguagens modernas
  8. Cronologia
  9. Perguntas frequentes
  10. John McCarthy programou sozinho o primeiro Lisp?
  11. Porque Lisp usa tantos parênteses?
  12. Lisp é a primeira linguagem funcional?
  13. Qual é a relação entre Lisp e inteligência artificial?
  14. Lisp ainda é utilizado?

Em meados dos anos 1950, os computadores já eram excelentes no cálculo numérico. John McCarthy queria confiar-lhes outra categoria de trabalho: manipular ideias representadas por símbolos, construir raciocínios e tratar expressões cujo tamanho não era conhecido antecipadamente.

Dessa ambição nasceu Lisp. Em vez de considerar um programa apenas como sequência fixa de instruções, Lisp representa o código com as mesmas estruturas usadas para os dados. Um programa pode assim examinar uma expressão, transformá-la e produzir outra. Esta propriedade influenciou profundamente a programação funcional e os sistemas interativos.

McCarthy associou esta investigação ao time-sharing, que permitia a várias pessoas trabalhar interativamente com o mesmo computador. Lisp e time-sharing procuravam transformar a máquina de processador de lotes em parceiro experimental.

Representar raciocínio, não apenas números

John McCarthy nasceu em 1927 em Boston e cresceu sobretudo em Los Angeles. Estudou matemática no California Institute of Technology e doutorou-se em Princeton em 1951.

As primeiras linguagens de alto nível, como FORTRAN, estavam sobretudo orientadas para números. McCarthy interessava-se por palavras, regras lógicas, provas e árvores de expressões. Em 1955 participou na proposta do projeto de verão de Dartmouth e introduziu a expressão inteligência artificial para designar um novo campo de investigação.

Para explorar essas ideias era necessária uma linguagem que tratasse símbolos tão diretamente como FORTRAN tratava números.

Porque as listas se tornaram centrais

Um raciocínio pode ser representado como uma expressão composta por outras expressões. Lisp, de list processing, faz por isso da lista a estrutura fundamental. Uma lista pode conter números, nomes ou outras listas.

A organização favorece a recursão: uma função trata uma parte e chama-se novamente para o restante até atingir um caso elementar. Lisp não inventou a recursão, mas tornou-a uma forma natural de trabalhar com estruturas encaixadas.

Em 1960, McCarthy publicou Recursive Functions of Symbolic Expressions and Their Computation by Machine, apresentando Lisp como um pequeno sistema de regras capaz de expressar cálculo geral.

Quando código e dados têm a mesma forma

Os parênteses de Lisp podem surpreender, mas a sua regularidade cria uma propriedade decisiva: uma expressão de código é ela própria uma lista. Código e dados partilham uma representação comum.

Esta homoiconicidade permite que um programa receba código como dado, o analise e construa uma nova versão. As macros Lisp utilizam este mecanismo para estender a linguagem sem alterar o compilador a cada necessidade.

McCarthy imaginava inicialmente uma notação mais convencional, as M-expressions. Quando Steve Russell percebeu que a função de avaliação descrita por McCarthy podia ser programada, as S-expressions entre parênteses tornaram-se diretamente executáveis e acabaram por constituir a sintaxe duradoura.

Automatizar uma memória dinâmica

As listas Lisp são criadas e abandonadas durante a execução. Libertá-las manualmente tornaria o código complexo e frágil. Lisp introduziu por isso o garbage collector, que identifica objetos ainda alcançáveis e recupera a memória dos restantes.

A gestão automática tem um custo, mas reduz erros e facilita estruturas dinâmicas. Java, JavaScript, Python, Go e muitas outras linguagens usam hoje variantes do mesmo princípio.

Uma linguagem construída por uma comunidade

Atribuir todo Lisp a McCarthy ocultaria o trabalho coletivo. Ele definiu os conceitos centrais, mas Steve Russell programou o primeiro avaliador; Daniel Edwards trabalhou na recuperação automática de memória; Timothy Hart e Michael Levin criaram um compilador inicial.

Lisp tornou-se rapidamente uma família: Lisp 1.5, Maclisp, Interlisp, Scheme, Common Lisp, Emacs Lisp e Clojure representam objetivos e épocas diferentes. A diversidade mostra tanto a força como a fragmentação de um modelo facilmente extensível.

O time-sharing muda a relação com a máquina

Nos anos 1950, os computadores executavam frequentemente trabalhos em lote. McCarthy defendeu o time-sharing generalista: a máquina alterna rapidamente entre utilizadores e dá a cada um uma experiência interativa.

Lisp adapta-se particularmente bem a essa visão. Um interpretador pode ler uma expressão, avaliá-la e mostrar o resultado num ciclo contínuo, modelo conhecido como REPL. Programar torna-se uma conversa experimental com o sistema.

McCarthy desenvolveu esta visão no MIT e depois no Stanford Artificial Intelligence Laboratory, onde linguagens, terminais, redes e investigação evoluíam em conjunto.

O que Lisp transmitiu às linguagens modernas

Lisp já não é a única linguagem da investigação em inteligência artificial, mas muitas das suas ideias tornaram-se comuns: funções como valores, closures, recursão, memória automática, macros e ambientes interativos.

John Backus defenderia também a composição funcional; Guido van Rossum integrou ferramentas funcionais em Python; Brendan Eich inspirou-se em Scheme para algumas fundações de JavaScript.

McCarthy morreu em 2011. O seu legado está em ter mostrado que uma linguagem podia representar expressões simbólicas com simplicidade suficiente para que programas, regras e código fossem manipulados pelos mesmos mecanismos.

Cronologia

  • 1927: nascimento em Boston.
  • 1951: doutoramento em matemática em Princeton.
  • 1955: proposta de Dartmouth e introdução da expressão «inteligência artificial».
  • 1956: workshop de Dartmouth.
  • 1958: primeiras formulações de Lisp no MIT.
  • 1959: proposta sobre time-sharing generalista.
  • 1960: publicação do artigo fundamental sobre Lisp.
  • 1962: mudança para Stanford.
  • 1965: fundação do Stanford Artificial Intelligence Laboratory com Lester Earnest.
  • 1971: Prémio Turing.
  • 2011: morte aos 84 anos.

Perguntas frequentes

John McCarthy programou sozinho o primeiro Lisp?

Não. Definiu os princípios e a descrição; Steve Russell implementou o primeiro avaliador e outros investigadores contribuíram para memória automática e compiladores.

Porque Lisp usa tantos parênteses?

Tornam explícita a estrutura encaixada e dão a código e dados uma representação regular, fácil de analisar e transformar.

Lisp é a primeira linguagem funcional?

É uma das primeiras a colocar funções e recursão no centro, mas a programação funcional formou-se a partir de várias tradições matemáticas e linguísticas.

Qual é a relação entre Lisp e inteligência artificial?

Lisp foi concebido para símbolos, regras e estruturas necessárias aos primeiros programas de IA e tornou-se durante décadas uma linguagem dominante nesse domínio.

Lisp ainda é utilizado?

Sim, através de dialetos como Common Lisp, Scheme, Emacs Lisp e Clojure, além da sua influência em muitas linguagens modernas.

Este artigo foi útil?

Fontes e referências

  1. 1.Stanford Computer Science - Professor John McCarthy
  2. 2.Stanford Report - John McCarthy, seminal figure of artificial intelligence
  3. 3.John McCarthy - History of Lisp
  4. 4.Computer History Museum - Oral History of John McCarthy
  5. 5.National Academy of Sciences - John McCarthy: A Biographical Memoir

Coleção

Linguagens de programação

18 / 26

  1. 01Grace Hopper: dos primeiros compiladores ao COBOL
  2. 02John Backus: FORTRAN, a notação BNF e a recusa do código de máquina
  3. 03Dennis Ritchie: a linguagem C no coração do Unix
  4. 04FORTRAN: provar que um compilador pode competir com assembly
  5. 05A linguagem C: tornar os sistemas portáteis sem esconder a máquina
  6. 06Niklaus Wirth: de Pascal a Oberon, conceber pela simplicidade
  7. 07Bjarne Stroustrup: conceber C++ sem abdicar do desempenho
  8. 08Pascal: aprender a programar tornando a estrutura visível
  9. 09C++: de C with Classes ao C++ moderno
  10. 10Programação orientada a objetos: objetos, mensagens e abstrações reutilizáveis
  11. 11Guido van Rossum: criar Python para tornar o código legível
  12. 12Brendan Eich: JavaScript, do protótipo da Netscape ao padrão da Web
  13. 13James Gosling: o engenheiro na origem de Java
  14. 14Python: legibilidade, baterias incluídas e um ecossistema global
  15. 15Java: escrever uma vez, executar em qualquer lugar
  16. 16JavaScript: a linguagem que tornou a Web interativa
  17. 17Ken Thompson: de Unix a Go, a simplicidade como método
  18. 18John McCarthy: Lisp e a ideia de programar com símbolos
  19. 19Alan Kay: Smalltalk e o computador como meio pessoal
  20. 20Barbara Liskov: a abstração que tornou o software modular
  21. 21Robin Milner: ML, prova assistida e linguagens da interação
  22. 22Brian Kernighan: AWK, Unix e a arte de explicar código
  23. 23Anders Hejlsberg: de Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, a linguagem que ligou as ferramentas da Internet
  25. 25Yukihiro Matsumoto: Ruby e a felicidade do programador
  26. 26Rasmus Lerdorf: PHP e a democratização da Web dinâmica
BiografiaHistória da informáticaIniciante

Alan Turing: o matemático que deu forma ao cálculo

Descubra Alan Turing, o seu trabalho sobre computabilidade, o papel em Bletchley Park, os projetos de computadores e o contributo fundador para a inteligência artificial.

31 de julho de 202615 min