Las Raíces de Lisp
Mayo de 2001
(Escribí este artículo para ayudarme a entender exactamente lo que McCarthy descubrió. No necesitas saber esto para programar en Lisp, pero debería ser útil para cualquiera que quiera entender la esencia de Lisp — tanto en el sentido de sus orígenes como de su núcleo semántico. El hecho de que tenga un núcleo así es una de las características distintivas de Lisp, y la razón por la que, a diferencia de otros lenguajes, Lisp tiene dialectos.)
En 1960, John McCarthy publicó un artículo notable en el que hizo por la programación algo parecido a lo que Euclides hizo por la geometría. Demostró cómo, dadas unas pocas y simples operaciones y una notación para funciones, se puede construir un lenguaje de programación completo. Llamó a este lenguaje Lisp, por "List Processing" (Procesamiento de Listas), porque una de sus ideas clave fue usar una estructura de datos simple llamada lista tanto para el código como para los datos.
Vale la pena entender lo que McCarthy descubrió, no solo como un hito en la historia de las computadoras, sino como un modelo de hacia dónde tiende a convertirse la programación en nuestro tiempo. Me parece que ha habido dos modelos de programación realmente limpios y consistentes hasta ahora: el modelo C y el modelo Lisp. Estos dos parecen puntos de terreno elevado, con pantanos entre ellos. A medida que las computadoras se han vuelto más potentes, los nuevos lenguajes que se están desarrollando se han movido constantemente hacia el modelo Lisp. Una receta popular para nuevos lenguajes de programación en los últimos 20 años ha sido tomar el modelo de computación de C y añadirle, poco a poco, partes tomadas del modelo Lisp, como la tipificación en tiempo de ejecución y la recolección de basura.
En este artículo intentaré explicar en los términos más simples posibles lo que McCarthy descubrió. El punto no es solo aprender sobre un resultado teórico interesante que alguien descubrió hace cuarenta años, sino mostrar hacia dónde se dirigen los lenguajes. Lo inusual de Lisp — de hecho, la cualidad definitoria de Lisp — es que puede escribirse en sí mismo. Para entender lo que McCarthy quiso decir con esto, vamos a retroceder sus pasos, con su notación matemática traducida a código Common Lisp en ejecución.