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.