AS RAÍZES DO LISP
OriginalMaio de 2001
(Escrevi este artigo para me ajudar a entender exatamente o que McCarthy descobriu. Você não precisa saber dessas coisas para programar em Lisp, mas isso deve ser útil para qualquer um que queira entender a essência do Lisp — tanto no sentido de suas origens quanto de seu núcleo semântico. O fato de ter um núcleo é uma das características distintivas do Lisp, e a razão pela qual, diferente de outras linguagens, o Lisp tem dialetos.)
Em 1960, John McCarthy publicou um artigo notável em que fez pela programação algo semelhante ao que Euclides fez pela geometria. Ele mostrou como, dado um punhado de operadores simples e uma notação para funções, você pode construir uma linguagem de programação inteira. Ele chamou essa linguagem de Lisp, por "Processamento de Listas", porque uma de suas ideias principais era usar uma estrutura de dados simples chamada lista tanto para código quanto para dados.
Vale a pena entender o que McCarthy descobriu, não apenas como um marco na história dos computadores, mas como um modelo do que a programação tende a se tornar em nossa própria época. Parece-me que até agora houve dois modelos realmente limpos e consistentes de programação: o modelo C e o modelo Lisp. Esses dois parecem pontos altos, com baixios pantanosos entre eles. À medida que os computadores se tornaram mais poderosos, as novas linguagens que estão sendo desenvolvidas têm se movido constantemente em direção ao modelo Lisp. Uma receita popular para novas linguagens de programação nos últimos 20 anos tem sido pegar o modelo C de computação e adicionar a ele, aos poucos, partes tiradas do modelo Lisp, como tipagem em tempo de execução e coleta de lixo.
Neste artigo, vou tentar explicar em termos o mais simples possível o que McCarthy descobriu. O objetivo não é apenas aprender sobre um resultado teórico interessante que alguém descobriu há quarenta anos, mas mostrar para onde as linguagens estão indo. A coisa incomum sobre o Lisp — na verdade, a qualidade definidora do Lisp — é que ele pode ser escrito em si mesmo. Para entender o que McCarthy quis dizer com isso, vamos retratar seus passos, com sua notação matemática traduzida em código Common Lisp em execução.