Parece haber una creencia arraigada (principalmente por quienes no hablan) que el lisp es mejor que la mayoría de los idiomas en IA.
¿Dónde se originó esta creencia? ¿Y hay alguna base para ello?
Parece haber una creencia arraigada (principalmente por quienes no hablan) que el lisp es mejor que la mayoría de los idiomas en IA.
¿Dónde se originó esta creencia? ¿Y hay alguna base para ello?
Respuestas:
Una de las diferencias clave entre los lenguajes tipo LISP y otros lenguajes es que en los LISP, el código y los datos son lo mismo. Esto hace posible hacer cosas como hacer que un programa modifique algunos de sus algoritmos durante el tiempo de ejecución a medida que "aprende" cosas nuevas, como una parte nativa del lenguaje.
Otro aspecto que entra en esto, aunque no tanto, es la capacidad de LISP para agregar fácilmente nuevas semánticas de lenguaje a través de macros. Esto hace posible entrar y definir un DSL con el que su IA funciona y puede evolucionar, con el potencial de que ese lenguaje crezca, se corrija automáticamente y evolucione mientras la IA se está ejecutando.
De acuerdo con Quadrescence, el historial de uso de LISP contribuye en gran medida a la imagen de LISP de que es bueno para la IA. ¿Por qué se utiliza LISP para AI? Cubre la historia con mucho más detalle.
fuente
Algunos de los primeros programas en lisp fueron demostradores de teoremas, matemática simbólica, el clásico ELIZA, etc. Además de libros como el PAIP de Peter Norvig, así como el hecho de que lisp se origina en el laboratorio MIT AI, obtuvo esa imagen ese ceceo es bueno para la IA.
DARPA también financió universidades para la investigación en IA y compró cantidades significativas de hardware de Symbolics. La escasez de fondos finalmente condujo al llamado "invierno AI".
Finalmente, los idiomas originales como Fortran (o "idiomas" como ASM) se usaron principalmente para la computación numérica. Trabajaste con números y matrices de ellos. En estos días tenemos símbolos, o la capacidad de crear casi cualquier objeto que deseemos, en la mayoría de los idiomas modernos.
Entonces, la razón por la cual el ceceo fue mejor para AI en un momento dado ya no es el caso. Sin embargo, la idea de que "lisp es bueno para la IA" aún persiste.
Si lisp es o no un mejor lenguaje debido a sus características y estructura es un caso completamente diferente (ya que realmente este tipo de cosas se aplica a muchas otras áreas además de la IA, y generalmente conducirá a una antigua guerra de llamas).
fuente
Veamos algunos de los programas actuales de IA: (1) Robots, por ejemplo, autos sin conductor. En el gran desafío de DARPA, el software superior para conducir automóviles no era Lisp. Más bien era un lenguaje de procedimiento como C ++ o Java. (2) Traducción automática del lenguaje natural. Lisp no se utiliza para este propósito en sistemas de producción ampliamente utilizados. (3) Juego, por ejemplo, programas de ajedrez. Lisp no se utiliza para este propósito en programas de ajedrez superiores ampliamente utilizados como Fritz.
Lisp fue inventado y desarrollado por los laboratorios de inteligencia artificial de los EE. UU. En la década de 1960 para prototipar rápidamente los programas de lógica simbólica en los que las estructuras de datos nativas de Lisp se ajustan al nivel de abstracción simbólica requerido; por ejemplo, las palabras en inglés podrían ser símbolos en una lista, las fórmulas lógicas podrían ser fácilmente representado como listas de operadores y operandos.
Pero para los programas de producción, las ventajas de ingeniería de software de lenguajes tipados estáticos y una amplia variedad de bibliotecas de terceros, significa que Lisp ni siquiera se considera para grandes sistemas modernos que realizan tareas de inteligencia artificial.
fuente
@Stephen Reed lo dijo muy bien. Solo puedo agregar que estuve en el MIT AI Lab en los años 70. Escuché una historia sobre el origen de Lisp. No puedo jurar que sea verdad, pero es así:
John McCarthy estaba en el MIT en los años 50, y había estado trabajando para probar las propiedades de los programas, y para esto había estado usando una sintaxis simple similar al cálculo de Lambda.
La historia era que uno de los estudiantes de posgrado quería hacer un proyecto (analogía, prueba de teorema o matemática simbólica, no recuerdo cuál) y le preguntó a McCarthy qué lenguaje usar. La respuesta: Fortran, por supuesto. (No había mucho más, y el procesamiento de listas en sí era bastante conocido entonces, pero solo como paquetes de subrutinas, no como idiomas). Bueno, de alguna manera eso llevó a un programa que procesaría símbolos en estructuras de listas anidadas. Junto con una forma de leerlos e imprimirlos, y luego una
eval
función, y Voila ', un idioma. Un lenguaje de procesamiento LISt. Despegó de allí.Para el tipo de algoritmos que estábamos haciendo en esos días (y que todavía muy pocas personas están haciendo) se necesitaba un lenguaje que pudiera manipular fácilmente las expresiones simbólicas. En eso era bueno Lisp. Ha habido muchas variaciones en el concepto básico, con diferentes nombres, como Prolog, Scheme, etc., etc.
Entonces, la IA significa muchas cosas para muchas personas, y diferentes idiomas son buenos para diferentes cosas, pero para problemas que podrían describirse como manipulación de símbolos, es difícil encontrar un lenguaje útil que de alguna manera no descienda de Lisp.
fuente
Lisp tiene ventajas para el tipo de cosas que se llamaron IA, al menos las cosas relacionadas con la lógica, la búsqueda y el análisis que eran la mayoría de la IA hasta alrededor de los años 90.
Una gran ventaja de Lisp es su soporte para macros: código como datos, metaprogramación.
El ML estándar (SML) es otro lenguaje que se ha utilizado ampliamente en la IA, por ejemplo, desde los años 80. El objetivo CAML y F # son evoluciones de SML.
Una ventaja importante de la familia ML (y Haskell, etc.) es la coincidencia de patrones. Probablemente también esté disponible en Lisp, pero a través de una biblioteca de metaprogramación en lugar de incorporada en el lenguaje. También está disponible en Haskell, pero al menos por el momento, la coincidencia de patrones no es común fuera de los lenguajes de programación funcionales.
He visto afirmaciones de que LISP es básicamente un cálculo lambda sin tipo extendido, y ML es básicamente un cálculo lambda con tipo extendido. No tengo conocimiento del cálculo tipificado de lambda para decirlo con certeza.
La IA también se ha convertido en un tema mucho más amplio a lo largo de los años, hasta el punto de que casi ha desaparecido por completo. La minería de datos podría considerarse un subcampo de IA. Muchas cosas de IA (OCR, reconocimiento de voz) casi han dejado de ser IA: son solo aplicaciones, igual que cualquier otra. Y la IA depende mucho más del procesamiento de señales y otros tipos de cálculo de números de lo que solía ser.
Para el reconocimiento de voz y OCR, la inteligencia artificial siempre dependía del procesamiento de la señal y del procesamiento de números. Sí, hay algunas contradicciones en esto ;-) No puedo dar el peso de las cosas, ya que realmente no sé.
De todos modos, como resultado, probablemente no haya un solo lenguaje apropiado incluso para la totalidad de una aplicación moderna de inteligencia artificial; supongo (sin conocimiento de primera mano) que hay mucho desarrollo en varios idiomas en la inteligencia artificial moderna. Y casi puedo garantizarle que encontrará C y C ++ en algunos proyectos, para obtener el mejor rendimiento. No me sorprendería si hay una gran cantidad de Python por razones similares: con una buena biblioteca numérica, Python puede manejar fácilmente las tareas de cálculo de números.
En uno de esos autos sin conductor, imagino que el sistema de visión está escrito en un idioma diferente (y se ejecuta en un hardware diferente) al sistema de planificación de ruta.
fuente