06.10.2026 · Signal Titans Editorial
Corchetes y S-expresiones: cómo las limitaciones de las tarjetas perforadas de IBM moldearon Lisp
Cómo las restricciones de las tarjetas perforadas de IBM a finales de los 50 llevaron a John McCarthy a crear la sintaxis entre paréntesis de Lisp.

La máquina perforadora de tarjetas IBM 026 que utilizaban los estudiantes del Instituto de Tecnología de Massachusetts (MIT) a finales de la década de 1950 carecía de teclas para los corchetes en su disposición estándar. En el otoño de 1958, el informático John McCarthy encargó a un grupo de alumnos del MIT la tarea de implementar su diseño inicial para un nuevo lenguaje de programación destinado a la inteligencia artificial. La intención original de McCarthy era que los programadores escribieran código mediante M-expresiones, una notación algebraica de alto nivel centrada en el uso de corchetes. Sin embargo, como perforar esos caracteres ausentes requería trucos y maniobras engorrosas en aquel hardware, el equipo de estudiantes descartó por completo las M-expresiones y optó por escribir sus programas directamente con S-expresiones delimitadas por paréntesis.
De la lógica de Dartmouth a las listas algebraicas
Según relata Two Bit History, McCarthy empezó a dar forma a la idea de un lenguaje de procesamiento de listas durante el Proyecto de Investigación de Verano sobre Inteligencia Artificial de Dartmouth en 1956. En aquel encuentro, los investigadores Allen Newell y Herbert Simon presentaron su lenguaje IPL (Information Processing Language), ideado para manipular listas de expresiones simbólicas con las que generar demostraciones lógicas. Aunque McCarthy comprendió que las listas simbólicas resultaban idóneas para modelar la deducción automatizada, no le convencía el estilo tipo ensamblador de macros de IPL. Mientras Newell y Simon se habían enfocado en instrucciones de máquina de bajo nivel en lugar de una notación matemática, McCarthy buscaba una alternativa algebraica capaz de unir el procesamiento de listas simbólicas con la legibilidad de alto nivel característica de Fortran.
Programas de ajedrez y diferenciación simbólica
La visión de McCarthy evolucionó gracias a diversos experimentos computacionales desarrollados entre 1956 y 1958. En 1957, mientras redactaba rutinas para un programa de ajedrez en Fortran, las limitaciones de las estructuras de control de dicho lenguaje lo llevaron a idear las expresiones condicionales verdaderas. A diferencia de las sentencias de ramificación de Fortran, la condicional de McCarthy devolvía una subexpresión concreta en función de una prueba y evaluaba únicamente la rama que resultaba válida. Más tarde, durante el verano de 1958, al diseñar un sistema capaz de realizar diferenciación simbólica, advirtió que estas expresiones condicionales simplificaban de forma notable las operaciones recursivas. Para gestionar la diferenciación en sumas con un número arbitrario de términos, creó la función maplist, la cual aplicaba una función determinada a cada uno de los elementos de una lista. Con este conjunto de ideas, en el otoño de 1958 encomendó a sus alumnos del MIT la primera implementación práctica de Lisp.
Restricciones de las tarjetas perforadas y la S-expresión
En el plan inicial de McCarthy, las S-expresiones —expresiones simbólicas encerradas entre paréntesis— debían servir únicamente como una representación interna para la máquina, mientras que el código fuente concebido para los desarrolladores emplearía M-expresiones delimitadas por corchetes. Sin embargo, las limitaciones físicas de la perforadora IBM 026 alteraron para siempre la arquitectura de su sintaxis. Ante la falta de teclas para los corchetes, el equipo prefirió representar tanto las listas de datos como las llamadas a funciones mediante S-expresiones entre paréntesis. Lo que comenzó siendo un compromiso sintáctico provisional de bajo nivel se convirtió en el rasgo distintivo de Lisp: una notación prefija, estructuras de árbol homogéneas delimitadas por paréntesis y una representación idéntica para el código y los datos.
La formalización de la computación en 1960
En 1960, McCarthy publicó el artículo titulado «Recursive Functions of Symbolic Expressions and Their Computation by Machine». A medida que él y sus estudiantes simplificaban el lenguaje durante el proceso de desarrollo, McCarthy comprendió que Lisp había pasado de ser una herramienta de software práctica a convertirse en un sistema matemático conciso. Al definir Lisp sobre la base de un pequeño conjunto de reglas primitivas y funciones recursivas, ofreció un formalismo axiomático para el estudio de la computación que resultó ser más limpio que las máquinas de Turing o la teoría tradicional de funciones recursivas.
Su sintaxis mínima y sus fundamentos axiomáticos permitieron que Lisp se consolidara como el segundo lenguaje de alto nivel más antiguo que continúa en uso hoy en día, superado únicamente por Fortran. Las concesiones impuestas por el hardware de tarjetas perforadas en los años cincuenta terminaron por cimentar una estructura unificada y esencial, convirtiendo a Lisp en un símbolo fundamental del diseño de lenguajes de programación.
Ilustración editorial generada con IA; no es una fotografía documental.
Fuente: 0b10 0b10 How Lisp Became God's Own Programming Language