He estado aprendiendo a Lisp a expandir mis horizontes porque he oído que se usa en la programación de IA. Después de explorar un poco, todavía tengo que encontrar ejemplos de IA o algo en el lenguaje que lo haga más inclinado hacia él.
¿Se usó Lisp en el pasado porque estaba disponible, o hay algo que me falta?
lisp
artificial-intelligence
Cristián Romo
fuente
fuente
Respuestas:
Lisp fue utilizado en IA hasta finales de la década de 1980. Sin embargo, en los años 80, Common Lisp fue sobrevendido al mundo de los negocios como el "lenguaje AI"; La reacción forzada obligó a la mayoría de los programadores de IA a C ++ durante unos años. En la actualidad, los prototipos generalmente se escriben en un lenguaje dinámico más joven (Perl, Python, Ruby, etc.) y las implementaciones de investigaciones exitosas generalmente se realizan en C o C ++ (a veces Java).
Si tienes curiosidad por los años 70 ... bueno, yo no estaba allí. Pero creo que Lisp tuvo éxito en la investigación de IA por tres razones (en orden de importancia):
No tengo el viejo libro de IA de Peter Norvig , pero se supone que es una buena forma de aprender a programar algoritmos de IA en Lisp.
Descargo de responsabilidad: soy un estudiante graduado en lingüística computacional. Conozco el subcampo del procesamiento del lenguaje natural mucho mejor que los otros campos. Quizás Lisp se usa más en otros subcampos.
fuente
Artificial Intelligence by Patrick Henry Winston
. En la segunda edición, los capítulos de programación de ese libro se ramificaron en su propio libro sincronizadoLisp
. Como su nombre lo indica, la programación es enteramente enLisp
. people.csail.mit.edu/phw/Books/LISPBACK.HTMLLisp se usa para IA porque admite la implementación de software que computa muy bien con símbolos. Los símbolos, las expresiones simbólicas y la computación con ellos están en el centro de Lisp.
Las áreas típicas de IA para la computación con símbolos fueron / son: álgebra computacional, prueba de teoremas, sistemas de planificación, diagnóstico, sistemas de reescritura, representación y razonamiento de conocimientos, lenguajes lógicos, traducción automática, sistemas expertos y más.
No es de extrañar que muchas aplicaciones de IA famosas en estos dominios se hayan escrito en Lisp:
Hay miles de aplicaciones en estas áreas que están escritas en Lisp. Muy común para aquellos es que necesitan capacidades especiales en el área del procesamiento simbólico. Uno implementa lenguajes especiales que tienen intérpretes / compiladores especiales en estos dominios además de Lisp. Lisp permite crear representaciones para datos y programas simbólicos y puede implementar todo tipo de maquinaria para manipular estas expresiones (fórmulas matemáticas, fórmulas lógicas, planes, ...).
(Tenga en cuenta que también se usan muchos otros lenguajes de programación de propósito general en AI. He intentado responder por qué especialmente Lisp se usa en AI).
fuente
Una razón es que le permite extender el lenguaje con construcciones específicas para su dominio, convirtiéndolo, efectivamente, en un lenguaje específico de dominio. Esta técnica es increíblemente poderosa, ya que le permite razonar sobre el problema que está resolviendo, en lugar de barajar bits.
fuente
Mi suposición siempre ha sido que, al ser un lenguaje funcional, no diferencia entre código y datos. Todo, incluidas las definiciones de funciones y las llamadas a funciones, pueden tratarse como listas y modificarse como cualquier otro dato.
Por lo tanto, el código de auto-inspección y auto-modificación podría escribirse fácilmente.
fuente
Una posible respuesta es que AI es una colección de problemas muy difíciles, y Lisp es un buen lenguaje para resolver problemas difíciles, no solo AI.
En cuanto a por qué es así: las macros, las funciones genéricas y la rica introspección permiten un código conciso y una fácil introducción de abstracciones de dominio: es un lenguaje que puede hacer más potente. Para muchos problemas eso es innecesario, y tiene sus propios costos, pero para otros problemas se necesita potencia para avanzar.
fuente
Creo que está mal pensar en esto solo en términos de IA. Cosas como el AI-invierno y los efectos comerciales en el ceceo común son una distracción si se pregunta por qué se usó para la IA, no por qué no se usa con frecuencia ahora ...
De todos modos, creo que es porque la mayoría del código de IA era esencialmente código de investigación. Lisp es un gran lenguaje para la programación exploratoria, para implementar algoritmos difíciles, para auto modificarse y código a menudo modificado. En otras palabras, para el código de investigación.
Hoy uso lisp para algunos de mis códigos de investigación (matemática, procesamiento de señales) porque es más flexible y potente que la mayoría de los idiomas, pero sigue generando un código más eficiente que la mayoría de los idiomas. Por lo general, puedo obtener un rendimiento dentro de un factor de +/- 2 de, digamos, la velocidad de c ++, pero puedo implementar cosas mucho más rápido y lidiar con la complejidad que me llevaría mucho más tiempo que si usara c ++, java, c #.
Sin embargo, eso se está desviando del tema. Creo que el código AI se escribió principalmente en el lenguaje común durante un tiempo porque es un enfoque poderoso para el código de investigación. Sigue siendo; pero a medida que los algoritmos de `` IA '' se entendieron y exploraron mejor, partes de ellos fueron mucho más fáciles de enseñar y usar, por lo que aparecieron en idiomas de sabor del año en los cursos de pregrado. A partir de ahí, se convierte en una cuestión de lo que la gente ya sabe, qué bibliotecas están disponibles y qué funciona bien para grupos grandes.
fuente
Supongo que una gran razón fue la flexibilidad de las listas como una estructura básica de datos.
en ese momento, ser capaz de convertirlos en todo tipo de objetos compuestos y cosas nuevas como pasajes de mensajes y polimorfismo, lo convirtió en el lenguaje de elección; no específicamente para IA, sino para tareas grandes y complejas. especialmente cuando estaban experimentando con conceptos.
fuente
Creo que tienes razón: Lisp fue una herramienta útil para hackear cosas. Esto se debe a que no distingue mucho entre programa y datos. Esto permitió a los piratas informáticos manipular funciones muy fácilmente, al igual que los datos.
Pero el lisp es bastante difícil de leer para los humanos, con sus llaves y su no distinción entre datos y programa. Hoy, no usaré lisp para ningún código de AI de producción (o tal vez incluso para la creación de prototipos), pero preferiría Python para las secuencias de comandos.
Otra cosa a considerar son las bibliotecas / herramientas existentes en / relacionadas con el idioma. No estoy en condiciones de comparar las bibliotecas de lisp con las bibliotecas de python, pero supongo que las bibliotecas y el código abierto importan mucho más ahora que antes.
Esta respuesta se inspiró en la siguiente comparación entre lisp y python: http://amitp.blogspot.com/2007/04/lisp-vs-python-syntax.html
fuente
Recuerdo haber escuchado que, al ser un lenguaje funcional, Lisp era una muy buena opción para implementar algoritmos recursivos. Poder rastrear un árbol y regresar puede ser esencial cuando se consideran los procesos de toma de decisiones (transversal) y el resultado final (nodo hoja).
Esto me lo dijeron durante un curso de IA en la universidad donde estudiamos Lisp.
fuente
Una respuesta más cínica podría ser "porque perdió una guerra política de IA entre Japón y Estados Unidos en la década de 1980". Hay una publicación de blog divertida que especula sobre el impacto de la desaparición del sistema informático de quinta generación en el Prolog .
fuente