Vai al contenuto principale
BiografiaStoria dell’informaticaPrincipiante

John McCarthy: Lisp e l'idea di programmare con i simboli

Come John McCarthy progettò Lisp per rappresentare il ragionamento, trasformando liste, ricorsione e lo stesso codice in oggetti manipolabili.

Pubblicato 24 agosto 2026Lettura : 5 minDi Yann Bastien
Ritratto di John McCarthy a Stanford nel 2006
Mostra indice
  1. Rappresentare il ragionamento, non soltanto i numeri
  2. Perché le liste diventano centrali
  3. Quando codice e dati hanno la stessa forma
  4. Automatizzare una memoria dinamica
  5. Un linguaggio costruito da una comunità
  6. Il time-sharing cambia il rapporto con la macchina
  7. Cosa Lisp ha trasmesso ai linguaggi moderni
  8. Cronologia
  9. Domande frequenti
  10. John McCarthy programmò da solo il primo Lisp?
  11. Perché Lisp usa tante parentesi?
  12. Lisp è il primo linguaggio funzionale?
  13. Qual è il rapporto tra Lisp e l’intelligenza artificiale?
  14. Lisp è ancora usato?

A metà degli anni Cinquanta i computer eccellevano già nel calcolo numerico. John McCarthy voleva affidare loro un’altra categoria di lavoro: manipolare idee rappresentate da simboli, costruire ragionamenti e trattare espressioni di dimensione non nota in anticipo.

Da questa ambizione nacque Lisp. Invece di considerare un programma come una sequenza fissa di istruzioni, Lisp rappresenta il codice con le stesse strutture usate per i dati. Un programma può quindi esaminare un’espressione, trasformarla e produrne una nuova. Questa proprietà influenzerà profondamente la programmazione funzionale e i sistemi interattivi.

McCarthy collegò questa ricerca al time-sharing, che permetteva a più persone di lavorare interattivamente con lo stesso computer. Lisp e time-sharing miravano a trasformare il calcolatore da macchina batch a partner sperimentale.

Rappresentare il ragionamento, non soltanto i numeri

John McCarthy nacque nel 1927 a Boston e crebbe soprattutto a Los Angeles. Studiò matematica al California Institute of Technology e conseguì il dottorato a Princeton nel 1951.

I primi linguaggi di alto livello, come FORTRAN, erano soprattutto orientati ai numeri. McCarthy si interessava invece a parole, regole logiche, prove e alberi di espressioni. Nel 1955 partecipò alla proposta del progetto estivo di Dartmouth e vi introdusse l’espressione intelligenza artificiale.

Per esplorare queste idee serviva un linguaggio capace di trattare i simboli con la stessa naturalezza con cui FORTRAN trattava i numeri.

Perché le liste diventano centrali

Un ragionamento può essere rappresentato come un’espressione composta da altre espressioni. Lisp, da list processing, rende quindi la lista la propria struttura fondamentale. Una lista può contenere numeri, nomi o altre liste.

Questa organizzazione favorisce la ricorsione: una funzione tratta una parte e richiama se stessa sul resto fino a raggiungere un caso elementare. Lisp non inventò la ricorsione, ma la rese un modo naturale di lavorare con strutture annidate.

Nel 1960 McCarthy pubblicò Recursive Functions of Symbolic Expressions and Their Computation by Machine, dove Lisp appare come un piccolo sistema di regole capace di esprimere calcolo generale.

Quando codice e dati hanno la stessa forma

Le parentesi di Lisp possono sorprendere, ma la loro regolarità produce una proprietà decisiva: un’espressione di codice è essa stessa una lista. Codice e dati condividono una rappresentazione.

Questa omoiconicità permette a un programma di ricevere codice come dato, analizzarlo e costruirne una nuova versione. Le macro Lisp sfruttano il meccanismo per estendere il linguaggio senza modificare ogni volta il compilatore.

McCarthy immaginava inizialmente una notazione più convenzionale, le M-expressions. Quando Steve Russell comprese che la funzione di valutazione descritta da McCarthy poteva essere programmata, le S-expressions tra parentesi divennero direttamente eseguibili e finirono per costituire la sintassi duratura.

Automatizzare una memoria dinamica

Le liste Lisp vengono create e abbandonate durante l’esecuzione. Liberarle tutte manualmente avrebbe reso il codice fragile. Lisp introdusse quindi il garbage collector, che individua gli oggetti ancora raggiungibili e recupera la memoria degli altri.

La gestione automatica ha un costo, ma riduce gli errori e rende più facile costruire strutture dinamiche. Java, JavaScript, Python, Go e molti altri linguaggi adottano oggi varianti dello stesso principio.

Un linguaggio costruito da una comunità

Attribuire tutto Lisp a McCarthy nasconderebbe il lavoro collettivo. Egli definì i concetti centrali, ma Steve Russell programmò il primo valutatore; Daniel Edwards lavorò alla raccolta automatica della memoria; Timothy Hart e Michael Levin realizzarono un compilatore precoce.

Lisp divenne presto una famiglia: Lisp 1.5, Maclisp, Interlisp, Scheme, Common Lisp, Emacs Lisp e Clojure riflettono epoche e obiettivi diversi. Questa diversità mostra sia la forza sia la frammentazione di un modello facilmente estendibile.

Il time-sharing cambia il rapporto con la macchina

Negli anni Cinquanta i computer eseguivano spesso lavori in batch. McCarthy difese il time-sharing generalista: la macchina alterna rapidamente gli utenti e offre a ciascuno un’esperienza interattiva.

Lisp si adatta perfettamente a questa idea. Un interprete può leggere un’espressione, valutarla e mostrare il risultato in un ciclo continuo: il modello poi chiamato REPL. Programmare diventa una conversazione sperimentale con il sistema.

McCarthy sviluppò questa visione al MIT e poi allo Stanford Artificial Intelligence Laboratory, dove linguaggi, terminali, reti e ricerca si influenzavano reciprocamente.

Cosa Lisp ha trasmesso ai linguaggi moderni

Lisp non è più l’unico linguaggio della ricerca sull’intelligenza artificiale, ma molte sue idee sono diventate comuni: funzioni come valori, closure, ricorsione, memoria automatica, macro e ambienti interattivi.

John Backus avrebbe difeso la composizione funzionale; Guido van Rossum integrò strumenti funzionali in Python; Brendan Eich attinse a Scheme per alcune fondamenta di JavaScript.

McCarthy morì nel 2011. La sua eredità consiste nell’aver mostrato che un linguaggio poteva rappresentare espressioni simboliche con sufficiente semplicità perché programmi, regole e codice fossero manipolabili dagli stessi meccanismi.

Cronologia

  • 1927: nascita a Boston.
  • 1951: dottorato in matematica a Princeton.
  • 1955: proposta di Dartmouth e introduzione dell’espressione «intelligenza artificiale».
  • 1956: workshop di Dartmouth.
  • 1958: prime formulazioni di Lisp al MIT.
  • 1959: proposta sul time-sharing generalista.
  • 1960: pubblicazione dell’articolo fondamentale su Lisp.
  • 1962: trasferimento a Stanford.
  • 1965: fondazione dello Stanford Artificial Intelligence Laboratory con Lester Earnest.
  • 1971: premio Turing.
  • 2011: morte a 84 anni.

Domande frequenti

John McCarthy programmò da solo il primo Lisp?

No. Definì principi e descrizione; Steve Russell realizzò il primo valutatore e altri ricercatori contribuirono alla memoria automatica e al compilatore.

Perché Lisp usa tante parentesi?

Rendono esplicita la struttura annidata e forniscono a codice e dati una rappresentazione regolare e facilmente trasformabile.

Lisp è il primo linguaggio funzionale?

È uno dei primi a rendere centrali funzioni e ricorsione, ma la programmazione funzionale nasce da più tradizioni matematiche e linguistiche.

Qual è il rapporto tra Lisp e l’intelligenza artificiale?

Lisp fu progettato per simboli, regole e strutture usate nei primi programmi di IA e ne divenne per decenni un linguaggio dominante.

Lisp è ancora usato?

Sì, attraverso dialetti come Common Lisp, Scheme, Emacs Lisp e Clojure, oltre che come influenza su molti linguaggi moderni.

Questo articolo ti è stato utile?

Fonti e riferimenti

  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

Raccolta

Linguaggi di programmazione

18 / 26

  1. 01Grace Hopper: dai primi compilatori a COBOL
  2. 02John Backus: FORTRAN, la notazione BNF e il rifiuto del codice macchina
  3. 03Dennis Ritchie: il linguaggio C al cuore di Unix
  4. 04FORTRAN: dimostrare che un compilatore può competere con l'assembly
  5. 05Il linguaggio C: rendere portabili i sistemi senza nascondere la macchina
  6. 06Niklaus Wirth: da Pascal a Oberon, progettare con la semplicità
  7. 07Bjarne Stroustrup: progettare C++ senza rinunciare alle prestazioni
  8. 08Pascal: imparare a programmare rendendo visibile la struttura
  9. 09C++: da C with Classes al C++ moderno
  10. 10Programmazione orientata agli oggetti: oggetti, messaggi e astrazioni riutilizzabili
  11. 11Guido van Rossum: creare Python per rendere il codice leggibile
  12. 12Brendan Eich: JavaScript, dal prototipo Netscape allo standard del Web
  13. 13James Gosling: l'ingegnere all'origine di Java
  14. 14Python: leggibilità, batterie incluse e un ecosistema globale
  15. 15Java: scrivere una volta, eseguire ovunque
  16. 16JavaScript: il linguaggio che ha reso interattivo il Web
  17. 17Ken Thompson: da Unix a Go, la semplicità come metodo
  18. 18John McCarthy: Lisp e l'idea di programmare con i simboli
  19. 19Alan Kay: Smalltalk e il computer come medium personale
  20. 20Barbara Liskov: l'astrazione che ha reso modulare il software
  21. 21Robin Milner: ML, dimostrazione assistita e linguaggi dell'interazione
  22. 22Brian Kernighan: AWK, Unix e l'arte di spiegare il codice
  23. 23Anders Hejlsberg: da Turbo Pascal a C# e TypeScript
  24. 24Larry Wall: Perl, il linguaggio che ha collegato gli strumenti di Internet
  25. 25Yukihiro Matsumoto: Ruby e la felicità del programmatore
  26. 26Rasmus Lerdorf: PHP e la democratizzazione del Web dinamico
BiografiaStoria dell’informaticaPrincipiante

Alan Turing: il matematico che diede forma al calcolo

Scopri Alan Turing, i suoi lavori sulla computabilità, il ruolo a Bletchley Park, i progetti di computer e il contributo fondativo all'intelligenza artificiale.

31 luglio 202615 min