Название | Mentes geniales. La vida y obra de 12 grandes informáticos |
---|---|
Автор произведения | Camilo Chacón Sartori |
Жанр | Зарубежная деловая литература |
Серия | |
Издательство | Зарубежная деловая литература |
Год выпуска | 0 |
isbn | 9788426733917 |
Nilsson añadió que «el taller de Dartmouth se considera generalmente como el primer trabajo serio en este campo [IA] al que McCarthy dedicó su carrera científica».
McCarthy fue precursor de uno de los movimientos (approach en inglés) de la inteligencia artificial, en particular el llamado logicista. A continuación, definiremos tres: simbólico, logicista y soft computing.
1. Realiza un énfasis en que la inteligencia humana puede reducirse a la manipulación de símbolos (este movimiento se llamó simbólico o GOFAI [good old fashioned AI]).
2. Otro enfoque es el logicista, que trata de lo siguiente: más que buscar la simulación de la inteligencia humana, es mejor centrarse en la esencia subyacente del razonamiento de la resolución de problemas (este movimiento lo inició McCarthy).
3. En la actualidad, un movimiento que ha tomado fuerza es el de las redes neuronales y los algoritmos de aproximación, haciendo uso de estas técnicas se pretende dejar de lado los sistemas lógico-exactos por métodos de aproximación, para cuando se tiene información incompleta o con alta incertidumbre (a menudo lo llaman soft computing).
Existen otros más, pero creo que con estos usted ya puede formarse una idea. McCarthy fue uno de los fundadores del movimiento logicista, el cual hace uso de métodos exactos que nos entrega la lógica formal. Para llevar a cabo sus ideas, crearía Lisp, un lenguaje de programación que, hasta el día de hoy, algunos de sus derivados son utilizados en áreas de investigación y en la industria.
2.3 LISP
McCarthy, en 1958, obtuvo una beca para ir al MIT, donde había disponibles ordenadores IBM, lo cual era importante para seguir trabajando en sus proyectos. Además, estaba cerca de donde se encontraba Marvin Minsky, quien estaba en Harvard. Precisamente con él intercambió múltiples ideas.
En ese momento comienza a trabajar en un nuevo lenguaje de programación, Lisp. ¿Cómo nació la idea de crear Lisp? Según Nilsson, «McCarthy dijo que la idea del procesamiento de listas [de Lisp] se la dieron Allen Newell y Herber Simon25 en el taller de Dartmouth de 1956, pero que no le gustaba el lenguaje IPL que utilizaban». Esto no es de extrañar, muchas nuevas herramientas surgen por una incomodidad con lo actual, de hecho, es así como avanza la tecnología.
Este lenguaje da comienzo a una familia de lenguajes de programación funcionales, o sea, se transformaría en un dialecto. Su primera versión apareció en 1958 y su nombre proviene de LISt Processor (procesamiento de listas). Con una similitud al cálculo lambda, fue el primer lenguaje de programación en ser usado para tareas sobre inteligencia artificial26.
A modo de anécdota: el cálculo lambda es un modelo de computación creado por Alonzo Church, basado en el uso de funciones para realizar la computación, que vio la luz durante la década de 1930. A pesar de que McCarthy negó que hubiera sido influenciado por el cálculo lambda para diseñar Lisp, mencionó lo siguiente:
Lisp [...] no fue un intento de llevar a la práctica el cálculo lambda, aunque si alguien hubiera empezado con esa intención, podría haber terminado con algo como Lisp. (Wexelblat, 1981, pág. 190).
A pesar de tener (Lisp) una sintaxis que podría parecer extraña para los programadores de hoy en día, fue un lenguaje que provocó una gran influencia en la comunidad de investigadores —de su tiempo y aún en los actuales—. Y ha sobrevivido al paso del tiempo en diversos dialectos de Lisp, por ejemplo, algunos conocidos: Scheme, Clojure y Racket. Pero existen muchos más.
La representación de la computación en Lisp lo hace ser muy útil para diseñar nuevos lenguajes de programación. Lisp es un lenguaje con homoiconicidad. ¿Qué significa? Que cada primitiva del lenguaje es en sí misma una estructura de datos. Una utilidad a la que, hasta nuestros días, los investigadores de la teoría de los lenguajes programación le sacan provecho. Ello se debe a que se abstrae de cuestiones que son irrelevantes, como el manejo de memoria y la asignación de variables; esto último tan popular en lenguajes imperativos (a saber, C, Python, etc.). Ya volveremos a esto brevemente.
El mismo Alan Kay27 tiene una cita muy divertida sobre Lisp:
Un notable grupo de excepciones a todos los sistemas anteriores fueron LISP [...] y TRAC. Ambos son lenguajes funcionales (uno de lista, otro de cadena de texto), ambos se comunican con el usuario con un solo lenguaje, y ambos son «homoicónicos» en el sentido de que sus representaciones, internas y externas, son esencialmente las mismas. Ambos tienen la capacidad de crear dinámicamente nuevas funciones que pueden ser elaboradas a gusto del usuario.
Su único gran inconveniente es que los programas escritos en ellos se parecen a la carta del rey Burniburiach a los sumerios realizada en cuneiforme babilónico28. […] (Alan C. Kay, Tesis doctoral de la University of Utah, 1969).
¡Lo mismo piensan muchos programadores sobre la sintaxis de Lisp! Pero veamos el lado positivo: la composición de expresiones puede verse muy claramente, muy notoriamente, muy explícitamente, con el uso de paréntesis; es útil porque cada expresión puede ser vista con una estructura similar a una creada dinámicamente (más abajo, en el ejemplo técnico se puede apreciar), es decir, los programas escritos en Lisp son visto como datos que pueden ser utilizados por otro programa29; si se hiciera usando una sintaxis estilo C —esto es, usando llaves de apertura y cierre y punto y coma—, no sería tan fácil de lograr ni ver dicho resultado.
En 1960, McCarthy describió por primera vez Lisp en el artículo «Recursive Functions of Symbolic Expressions and Their Computation by Machine», publicado en Communications of the ACM. Hayes y Morgenstern dirían: «Muchos de los ejemplos utilizados en los libros de texto sobre Lisp proceden directamente de este artículo». Lo que lo hizo ser un documento muy importante. Sobre todo, y esto lo digo desde la experiencia propia, siempre es grato y fundamental leer al autor de un lenguaje (o de cualquier herramienta) explicar su creación. Nadie tendrá —aunque sea un experto en ello la capacidad de ver en todas las direcciones posibles, con sus múltiples ángulos y perspectivas, los entresijos que guarda.
Un breve tutorial sobre Lisp
En este apartado explicaré un poco el lenguaje Lisp, en particular, su dialecto más robusto (Common Lisp)30. Por tanto, no es la misma versión creada por McCarthy, aunque las ideas que subyacen a su origen, naturalmente, se mantienen.
Comenzaré con lo básico, el famoso «Hola, mundo»:
(format t “Hola, mundo”)
Aquí vemos que la sintaxis se construye con paréntesis, «( expresión )», técnicamente esta sintaxis se llama expresión-S (o sexp)31; el «format» sería el nombre de la función que invocar, la cual cuenta con dos argumentos, «t» es el valor que se refiere al tipo de salida (en este caso en la terminal) y el valor que imprimir en pantalla «Hola, mundo».
Por ejemplo, las operaciones