John McCarthy, (al que todos llamaban “ 
  
uncle John 
  ”, a pesar de tener fama de ser una persona brusca), también aportó un gran avance al mundo de la computación cuando durante su estancia en el 
  
MIT en 1961. Propuso un método para optimizar y gestionar los recursos de un ordenador ( 
  
mainframe por aquella época) que llamó 
  
time-sharing. 
 
  
  
   
   LISP ( 
   
LISt Processor) apareció de forma casi natural a la vez que la 
   
IA ya que fue el resultado de la concentración de diferentes ideas entre 1956 y 1958. Algunas de estas ideas fueron obtenidas de otros lenguajes de programación como el 
   
Fortran pero además incorporaba nuevas técnicas como, por ejemplo, la computación simbólica frente a la numérica (de la cual derivó la programación simbólica), las estructuras de listas en la memoria del ordenador (su componente fundamental), el uso recursivo de expresiones de condición, el "recolector" de basura ( 
   
garbage collector, encargado básicamente de liberar la memoria de los datos no utilizados), las estructuras de datos de árbol y un largo etc. La notación de escritura de programa en 
   
LISP está influenciada directamente por el método de 
   
cálculo lambda, el cual hace que 
   
LISP tenga esa estructura de programación diferente, más orientado a las matemática, que el resto de lenguajes de programación. 
  
  
   
  
 
   
   LISP fue evolucionando poco a poco como un completo lenguaje a medida que en el laboratorio del 
   MIT se utilizaba para implementar técnicas para probar teoremas, resolución de problemas matemáticos, teoría de juegos, etc. las cuales fueron perfeccionando el lenguaje hasta convertirlo en el lenguaje oficial de la época para la 
   IA. 
  
 
   
  
   
  
    Algunos de los programas más conocidos en el mundo de la 
   
IA fueron desarrollados en 
   
LISP. Por ejemplo el famoso 
   
ELIZA, un programa de ordenador orientado al lenguaje natural desarrollado por 
   
Josep Weizenbaum también en el 
   
MIT. 
  
  
   
  
 
   
   ELIZA permitía entablar una conversación entre un humano y la máquina que simulaba ser un terapeuta. Otro programa muy conocido y que además forma parte de los cimientos que sustentan los actuales asistentes digitales como Siri o Cortana, es 
   
SHRDLU. Este programa fue desarrollado por 
   
Terry Winograd (el profesor tutor de 
   
Larry Page, cofundador de 
   
Google, en la 
   
Universidad de Standford) y programado en 
   
LISP por 
   
Marvin Minsky. El objetivo final del programa era desarrollar técnicas que permitieran a un programa de ordenador tomar decisiones y obedecer órdenes directamente partiendo de un dialogo natural entre el humano y la máquina utilizando el idioma inglés. 
  
  
   
  
 
  
    Ahora vamos a dar un breve repaso al funcionamiento del lenguaje LISP para poder entender mejor por qué se convirtió en el lenguaje de la IA. Vamos a comenzar con las operaciones matemáticas las cuales se realizan de forma distinta a lo habitual. Utilizando 
   
Common Lisp, el cálculo de una función matemática desde el intérprete 
   
LISP sería: 
  
  
   
  
 
  
    (+ (* 4 2) 1) 
  
 
  
    9 
  
 
   
  
 
  
    Las variables se asignan utilizando el commando 
   setq: 
  
 
   
  
 
  
    (setq x (+ (* 4 2) 1)) 
  
 
  
    (print x) 
  
 
  
    9 
  
 
   
  
 
  
    Las condiciones funcionan de la siguiente forma: 
  
 
   
  
 
  
    (if (< 2 3) 
  
 
  
    (... true ...) 
  
 
  
    (... false ...)) 
  
 
   
  
 
  
    Las listas son el componente clave de 
   LISP ya que son el núcleo de prácticamente todas las operaciones. Para crear una lista y asignarla a una variable podemos utilizar también el comando 
   setq: 
  
 
   
  
 
  
    (setq lst ‘(1 2 3)) 
  
 
   
  
 
  
    Para obtener el primer valor de la lista: 
  
 
   
  
 
  
    (first lst) 
  
 
  
    1 
  
 
   
  
 
  
    Y el resto de valores de la misma: 
  
 
   
  
 
  
    (rest lst) 
  
 
  
    2 3 
  
 
   
  
 
  
    Para añadir un elemento a la lista se utiliza el comando 
   cons: 
  
 
   
  
 
  
    (cons 0 lst) 
  
 
  
    (0 1 2 3) 
  
 
   
  
 
  
    Las funciones en 
   
LISP y la 
   
recursividad se pueden ver perfectamente en este programa que calcula las serie de 
   
Fibonacci: 
  
  
   
  
 
  
    (defun fibonacci (N) 
  
 
  
    (if (or (= N 0) (= N 1)) 
  
 
  
    1 
  
 
  
    (+ (fibonacci (- N 1)) (fibonacci (- N 2))))) 
  
 
   
  
 
  
    Definimos la función con el comando 
   defun con el parámetro (N) con el número a calcular la serie de 
   Fibonacci. Si el número calculado o introducido no es 0 o 1, se realiza el cálculo llamando recursivamente de nuevo a la misma función restando 1 y 2 al número N y finalmente realizando la suma, devolviendo el valor resultante. 
  
 
   
  
 
  
    La pregunta ahora es, una vez que ya vemos la importancia en la historia de la 
   IA y cómo funciona a nivel básico 
   LISP, ¿alguien lo utiliza hoy día? La respuesta es sí. De hecho, 
   LISP es bastante querido por grandes hackers de la informática. Veamos algunos de ellos: 
  
 
   
  
 
   
  
 
   
   - Paul Graham. Fundador de Y-Combinator. Programó el código fuente de su startup en LISP.
  
   - Robert Tappan Morris. Autor del primer gusano que infectó Internet, escribió el código Fuente de su pequeña compañía (Viaweb) en LISP.
  
   - Alan Kay. Pionero de los sistemas operativos orientados a objetos creó el lenguaje Smalltalk en LISP.
  
   - Edsger Wybe Dijkstra. Pionero en el diseño de sistemas operativos y concurrencia escribió la mayor parte de sus ensayos en LISP.
  
  
 
   
   
   LISP también vive a día de hoy en entornos de producción de algunas empresas y organizaciones. Por ejemplo 
   
Reddit y 
   
HackerNews funcionan en 
   
LISP y otros lenguajes de programación más actuales que están directamente relacionados con la 
   
IA y el 
   
Big Data como 
   
R y 
   
Julia también están basados en 
   
LISP. Como se puede observar, 
   
LISP está lejos de ser un lenguaje obsoleto y aunque hoy día existen lenguajes de programación que funcionan mejor con las técnicas actuales de 
   
IA como 
   
Tensorflow, 
   
LISP es un lenguaje que funciona muy bien para entender los conceptos básicos de la 
   
IA como la resolución de problemas, la programación simbólica o la recursividad. 
  
  
   
  
 
   
   
  
 
   
   John nos dejó el 24 de octubre de 2011 pero sus trabajos le han otorgado el honor de ser el padre de la IA y unos de los padres de la computación moderna.