Ir al contenido principal
Bethemesh
BiografíaHistoria de la informática

John McCarthy: Lisp y la idea de programar con símbolos

Descubre cómo John McCarthy concibió Lisp para representar el razonamiento y convirtió las listas, la recursión y el propio código en estructuras manipulables.

Publicado el 24 de agosto de 2026Lectura : 9 minPor Equipo Bethemesh
Principiante
Retrato de John McCarthy en Stanford en 2006
Mostrar el contenido
  1. Representar el razonamiento, no solo el cálculo
  2. Por qué las listas se convirtieron en el núcleo de Lisp
  3. Cuando el código tiene la misma forma que los datos
  4. Automatizar una memoria dinámica
  5. Un lenguaje construido por una comunidad investigadora
  6. El tiempo compartido cambió la relación con la máquina
  7. Lo que Lisp transmitió a los lenguajes modernos
  8. Cronología
  9. Preguntas frecuentes
  10. ¿Programó John McCarthy él solo el primer Lisp?
  11. ¿Por qué utiliza Lisp tantos paréntesis?
  12. ¿Fue Lisp el primer lenguaje funcional?
  13. ¿Qué relación existe entre Lisp y la inteligencia artificial?
  14. ¿Inventó McCarthy la recolección de basura?
  15. ¿Sigue utilizándose Lisp?

A mediados de los años cincuenta, los ordenadores ya sobresalían en el cálculo numérico. Resolvían ecuaciones, producían tablas y ejecutaban largas secuencias de operaciones aritméticas. John McCarthy quería encomendarles otra clase de trabajo: manipular ideas representadas mediante símbolos, construir razonamientos y procesar expresiones cuyo tamaño no se conocía de antemano.

Lisp nació de esa ambición. En vez de considerar un programa como una sucesión fija de instrucciones, representaba el código con las mismas estructuras que los datos. Así, un programa podía examinar una expresión, transformarla y producir otra. Esta propiedad influiría de manera duradera en la programación funcional, los sistemas interactivos y el diseño de numerosos lenguajes.

McCarthy no separaba esta investigación de la forma de utilizar los ordenadores. También defendió el tiempo compartido, que permitía a varias personas trabajar simultáneamente con una máquina. Lisp y el tiempo compartido respondían a un mismo objetivo: convertir el ordenador en un interlocutor para explorar problemas, no en una máquina a la que se entregaba un cálculo para recoger el resultado mucho después.

Representar el razonamiento, no solo el cálculo

John McCarthy nació en Boston en 1927 y creció principalmente en Los Ángeles. Estudió matemáticas en el California Institute of Technology y se doctoró en Princeton en 1951. La lógica matemática ocupó un lugar central en su formación.

Los primeros lenguajes de alto nivel estaban pensados sobre todo para trabajar con números. FORTRAN, dirigido por John Backus en IBM, permitía expresar fórmulas científicas sin escribir código máquina. Redujo enormemente el coste de la programación científica, pero no se adaptaba de forma natural a problemas cuyos datos fueran palabras, reglas lógicas, demostraciones o árboles de expresiones.

McCarthy se interesó por programas capaces de razonar sobre esas representaciones. En 1955 participó en la propuesta del proyecto de verano de Dartmouth e introdujo la expresión inteligencia artificial para designar ese campo de investigación. La elección encerraba una hipótesis: ciertos aspectos del aprendizaje y la inteligencia podían describirse con suficiente precisión como para que una máquina los simulara.

Poner a prueba esa hipótesis exigía un lenguaje que tratara los símbolos con la misma facilidad con la que FORTRAN trataba los números.

Por qué las listas se convirtieron en el núcleo de Lisp

Un razonamiento puede representarse como una expresión compuesta por otras expresiones. La suma de dos números, por ejemplo, puede describirse mediante una lista que contiene la operación y después sus argumentos: (+ 2 3). Una regla lógica puede adoptar la misma forma, aunque incluya símbolos y sublistas más profundas.

Lisp, nombre derivado de list processing, convirtió la lista en su estructura fundamental. Una lista puede contener números, nombres u otras listas. Dos operaciones básicas bastan para empezar a recorrerla: obtener el primer elemento y obtener el resto. Al combinarlas, un programa puede explorar una estructura de tamaño arbitrario.

Esta organización favorece la recursión. Una función procesa un elemento y se llama a sí misma con la parte restante hasta alcanzar un caso elemental. Lisp no inventó la recursión, pero hizo de ella una forma natural de describir cálculos sobre estructuras anidadas.

McCarthy formalizó el lenguaje en su artículo de 1960, Recursive Functions of Symbolic Expressions and Their Computation by Machine. Lisp aparecía menos como un catálogo de órdenes que como un pequeño sistema de reglas capaz de expresar un cálculo general.

Cuando el código tiene la misma forma que los datos

Los paréntesis de Lisp suelen sorprender al principio. Sin embargo, su regularidad aporta una propiedad decisiva: una expresión de código es también una lista. El programa y los datos que manipula comparten, por tanto, una representación común.

Esta propiedad, llamada homoiconicidad, permite que un programa reciba código como dato, lo analice y construya una versión nueva. Las macros de Lisp se apoyan en este mecanismo para ampliar el lenguaje sin tener que rediseñar el compilador ante cada necesidad.

La frontera entre quien utiliza un lenguaje y quien lo diseña se vuelve menos rígida. Un equipo puede crear una notación adaptada a su campo y traducirla a las formas elementales de Lisp. El mismo principio pervive en las macros, los lenguajes específicos de dominio y las herramientas que transforman código fuente.

Conviene distinguir la idea inicial de su implementación. McCarthy imaginó primero una notación más convencional basada en «M-expressions». Cuando Steve Russell comprendió que la función de evaluación descrita por McCarthy podía programarse, las S-expressions entre paréntesis pasaron a ejecutarse directamente. Una notación intermedia destinada a representar el lenguaje acabó convirtiéndose en su sintaxis duradera.

Automatizar una memoria dinámica

Las listas de Lisp se crean y abandonan durante la ejecución. Exigir al programador que liberase manualmente cada una haría que los programas simbólicos fueran complejos y frágiles. El sistema debía averiguar qué zonas de memoria habían dejado de ser accesibles y podían reutilizarse.

Lisp respondió con la recolección de basura. El entorno de ejecución identifica los objetos que el programa todavía puede alcanzar y recupera el espacio ocupado por los demás. El programador puede razonar sobre la vida lógica de los datos sin administrar directamente cada asignación.

La automatización tiene un coste: el recolector consume tiempo de proceso y puede interrumpir brevemente el programa. Cambia control inmediato por una reducción de los errores de memoria y más libertad para construir estructuras dinámicas. Java, JavaScript, Python, Go y muchos otros lenguajes adoptarían después distintas formas de gestión automática.

El legado de Lisp no se limita, por tanto, a una sintaxis. Reúne decisiones que se refuerzan entre sí: estructuras recursivas, funciones manipulables, código representado como datos y memoria automática.

Un lenguaje construido por una comunidad investigadora

Atribuir todo Lisp a McCarthy ocultaría el trabajo colectivo que transformó las ideas en un sistema utilizable. Él definió el modelo central y la notación, pero Steve Russell programó el primer evaluador. Daniel Edwards desarrolló uno de los primeros recolectores de basura. Timothy Hart y Michael Levin crearon un compilador Lisp temprano. Muchos investigadores del MIT y de otros centros continuaron haciendo evolucionar el lenguaje.

Esta distinción aclara la función de un diseñador. McCarthy proporcionó un modelo lo bastante sencillo para que otros pudieran implementarlo, discutirlo y ampliarlo. Lisp se convirtió pronto en una familia, no en un único producto: Lisp 1.5, Maclisp, Interlisp, Scheme, Common Lisp, Emacs Lisp y Clojure responden a épocas y objetivos diferentes.

La diversidad también produjo fragmentación. Un programa escrito para un dialecto no funcionaba necesariamente en otro. La normalización de Common Lisp en los años ochenta intentó reunir varias tradiciones, mientras que Scheme optó por conservar un núcleo más reducido.

El tiempo compartido cambió la relación con la máquina

Los ordenadores de los años cincuenta solían ejecutar trabajos por lotes. Los usuarios preparaban tarjetas o cintas, entregaban el programa a un operador y conocían el resultado más tarde. Un solo error podía obligar a repetir todo el ciclo.

Desde finales de esa década, McCarthy defendió el tiempo compartido de propósito general. La máquina alternaba rápidamente entre varios usuarios y daba a cada uno la impresión de trabajar de forma interactiva con un ordenador. Los investigadores podían probar una idea, observar el resultado y corregir el programa de inmediato.

Esta interacción se adaptaba especialmente bien a Lisp. Un intérprete podía leer una expresión, evaluarla y mostrar el resultado en un bucle continuo. Esta organización, hoy conocida como REPL, convirtió la programación en una conversación experimental con el sistema.

McCarthy contribuyó a impulsar esta visión en el MIT y después fundó el Stanford Artificial Intelligence Laboratory con Lester Earnest. Esos entornos reunían lenguajes, terminales, redes e investigadores. Mostraron que un lenguaje evoluciona tanto por su contexto de uso como por sus reglas formales.

Lo que Lisp transmitió a los lenguajes modernos

Lisp ya no es el lenguaje exclusivo de la investigación en inteligencia artificial, pero sus ideas salieron de su contexto original. Las funciones tratadas como valores, los cierres léxicos, la recursión, la gestión automática de memoria y los entornos interactivos aparecen en numerosos lenguajes contemporáneos.

John Backus también defendería una programación basada en mayor medida en la composición de funciones. Guido van Rossum incorporaría a Python varias herramientas funcionales dentro de un lenguaje multiparadigma. Brendan Eich se inspiraría en Scheme para algunas bases de JavaScript, aunque su sintaxis externa se parezca a la de C.

Esta difusión puede volver invisible la influencia de Lisp. Un desarrollador puede utilizar una función anónima, pasar una función a otra o experimentar en una consola interactiva sin conocer su genealogía. Lisp sigue siendo, sin embargo, un puente esencial entre la lógica matemática, la investigación en inteligencia artificial y las herramientas cotidianas de programación.

McCarthy murió en 2011. Su legado no consiste en afirmar que las máquinas ya hubieran alcanzado una inteligencia general. Es más preciso: demostró que un lenguaje podía representar expresiones simbólicas con suficiente sencillez para que programas, reglas y código fueran manipulables mediante los mismos mecanismos.

Cronología

  • 1927: John McCarthy nace en Boston.
  • 1948: se gradúa en matemáticas en el California Institute of Technology.
  • 1951: obtiene el doctorado en matemáticas en la Universidad de Princeton.
  • 1955: participa en la propuesta de Dartmouth que introduce la expresión «inteligencia artificial».
  • 1956: el encuentro de Dartmouth explora la nueva disciplina.
  • 1958: McCarthy formula las primeras versiones de Lisp en el Massachusetts Institute of Technology.
  • 1959: publica una propuesta de tiempo compartido de propósito general.
  • 1960: se publica su artículo sobre las funciones recursivas y el cálculo simbólico de Lisp.
  • 1962: se incorpora de forma permanente a Stanford.
  • 1965: funda con Lester Earnest el Stanford Artificial Intelligence Laboratory.
  • 1971: recibe el Premio Turing por sus contribuciones a la inteligencia artificial.
  • Años 1980: Common Lisp consolida varias tradiciones, mientras Scheme desarrolla un núcleo más minimalista.
  • 2001: McCarthy se jubila de Stanford.
  • 2011: fallece en Stanford a los 84 años.
  • Hoy: los dialectos de Lisp y sus ideas siguen presentes en la programación funcional, las macros y los entornos interactivos.

Preguntas frecuentes

¿Programó John McCarthy él solo el primer Lisp?

No. McCarthy definió los principios y la descripción inicial. Steve Russell creó el primer evaluador, mientras Daniel Edwards, Timothy Hart, Michael Levin y otros investigadores contribuyeron a la recolección de basura, la compilación y las primeras implementaciones.

¿Por qué utiliza Lisp tantos paréntesis?

Los paréntesis hacen explícita la estructura anidada de las expresiones. Como el código adopta la forma de listas, tanto el lector del lenguaje como los programas Lisp reciben una representación regular, fácil de analizar y transformar.

¿Fue Lisp el primer lenguaje funcional?

Fue uno de los primeros lenguajes que convirtieron las funciones y la recursión en herramientas centrales, y es el lenguaje funcional más antiguo que sigue utilizándose en varias formas. No obstante, la programación funcional como categoría se construyó gradualmente a partir de distintos trabajos matemáticos y lenguajes.

¿Qué relación existe entre Lisp y la inteligencia artificial?

Lisp se diseñó para manipular los símbolos, las reglas y las estructuras que necesitaban los primeros programas de inteligencia artificial. Dominó ese campo durante varias décadas, aunque la IA moderna emplea hoy muchos otros lenguajes.

¿Inventó McCarthy la recolección de basura?

Las primeras implementaciones de Lisp introdujeron la recolección de basura para recuperar automáticamente las listas sin uso. McCarthy describió la necesidad y el principio; Daniel Edwards implementó uno de los primeros mecanismos operativos. La innovación pertenece a la historia colectiva de Lisp.

¿Sigue utilizándose Lisp?

Sí. Common Lisp, Scheme, Racket, Emacs Lisp y Clojure responden a necesidades diferentes. Su influencia es aún más amplia: las funciones anónimas, los cierres, los REPL, las macros y la gestión automática de memoria forman parte de numerosos lenguajes.

Fuentes y referencias

  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

Colección

Lenguajes de programación

  1. 01Grace Hopper: de los primeros compiladores a COBOL
  2. 02John Backus: FORTRAN, la notación BNF y el rechazo del código máquina
  3. 03Dennis Ritchie: el lenguaje C en el corazón de Unix
  4. 04FORTRAN: demostrar que un compilador podía competir con el ensamblador
  5. 05El lenguaje C: hacer portables los sistemas sin ocultar la máquina
  6. 06Niklaus Wirth: de Pascal a Oberon, diseñar mediante la simplicidad
  7. 07Bjarne Stroustrup: diseñar C++ sin renunciar al rendimiento
  8. 08Pascal: aprender a programar haciendo visible la estructura
  9. 09C++: de C with Classes a un lenguaje de propósito general
  10. 10Programación orientada a objetos: objetos, mensajes y abstracciones reutilizables
  11. 11Guido van Rossum: crear Python para que el código sea legible
  12. 12Brendan Eich: JavaScript, del prototipo de Netscape al estándar web
  13. 13James Gosling: el ingeniero que dio origen a Java
  14. 14Python: legibilidad, baterías incluidas y un ecosistema mundial
  15. 15Java: escribir una vez, ejecutar en cualquier lugar
  16. 16JavaScript: el lenguaje que hizo interactiva la Web
  17. 17Ken Thompson: de Unix a Go, la simplicidad como método
  18. 18John McCarthy: Lisp y la idea de programar con símbolos
  19. 19Alan Kay: Smalltalk y el ordenador como medio personal
  20. 20Barbara Liskov: la abstracción que hizo modular el software
  21. 21Robin Milner: ML, la prueba asistida y los lenguajes de la interacción
  22. 22Brian Kernighan: AWK, Unix y el arte de explicar el código
  23. 23Anders Hejlsberg: de Turbo Pascal a C# y TypeScript
  24. 24Larry Wall: Perl, el lenguaje que conectó las herramientas de Internet
  25. 25Yukihiro Matsumoto: Ruby y la felicidad del programador
  26. 26Rasmus Lerdorf: PHP y la democratización de la Web dinámica
BiografíaHistoria de la informáticaPrincipiante

Alan Turing: el matemático que dio forma al cálculo

Descubre el trabajo de Alan Turing sobre la computabilidad, su papel en Bletchley Park, sus diseños de ordenadores y su contribución fundacional a la inteligencia artificial.

31 de julio de 202617 minLeer

¿Te ha resultado útil este artículo?