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 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 tal núcleo é uma das características distintivas do Lisp, e a razão pela qual, diferentemente de outras linguagens, o Lisp tem dialetos.)
Em 1960, John McCarthy publicou um artigo notável no qual ele fez para programação algo parecido com o que Euclides fez para 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, para "List Processing", porque uma de suas principais ideias era usar uma estrutura de dados simples chamada lista para código e dados.
Vale a pena entender o que McCarthy descobriu, não apenas como um marco na história dos computadores, mas como um modelo para o que a programação está tendendo a se tornar em nosso próprio tempo. Parece-me que houve dois modelos de programação realmente limpos e consistentes até agora: o modelo C e o modelo Lisp. Esses dois parecem pontos de terreno elevado, com planícies pantanosas entre eles. À medida que os computadores se tornaram mais poderosos, as novas linguagens sendo desenvolvidas têm se movido firmemente 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 retiradas do modelo Lisp, como digitação em tempo de execução e coleta de lixo.
Neste artigo, tentarei explicar nos termos mais simples possíveis o que McCarthy descobriu. O ponto não é apenas aprender sobre um resultado teórico interessante que alguém descobriu quarenta anos atrás, mas mostrar para onde as linguagens estão indo. O incomum sobre Lisp — na verdade, a qualidade definidora de Lisp — é que ele pode ser escrito em si mesmo. Para entender o que McCarthy quis dizer com isso, vamos refazer seus passos, com sua notação matemática traduzida em código Common Lisp em execução.