¿Hay alguna evidencia de que lisp en realidad es mejor que otros idiomas en inteligencia artificial? [cerrado]


21

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?


44
El título pregunta: ¿Es Lisp mejor que otros idiomas en AI? La pregunta en sí misma pregunta: ¿Lisp es malo en todo lo que no sea AI? Estas son preguntas muy diferentes (considere el escenario 1: Lisp es el mejor lenguaje para todo, y el escenario 2: Lisp es el peor lenguaje para todo). Es posible que desee editar el título o el cuerpo de la pregunta para aclarar qué pregunta realmente está haciendo.
Gareth McCaughan

99
Supongo que si la respuesta aceptada viniera de una máquina Lisp, ¿tendríamos la solución?
Martin Beckett

1
@Martin, aunque cualquier IA básica debe estar obligada a defender a su creador o debe dudar de su propia existencia.
Nicole

Este es un gran y honesto vistazo a Lisp para IA de Peter Norvig, escrito 10 años después de la publicación de Paradigms of AI Programming. norvig.com/Lisp-retro.html
michiakig

1
@jwenting: Creo que los puntos más importantes de Norvig sobre Java siguen siendo ciertos diez años después: Java no tiene una instalación de metaprogramación y no admite programación funcional.
Kevin Cline

Respuestas:


22

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.


3
Esta propiedad se llama Homoiconicity BTW.
MSalters

5

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).


55
Una mejor manera de decirlo podría ser que los buenos en IA estaban usando Lisp para ello.

1
Y no fue por casualidad, cuando comenzaron los pioneros. ¿Qué otros idiomas podrían elegir en la década de 1950?
Bo Persson

2
@Persson: Yo diría que fue algo por casualidad. Si PASCAL fue el siguiente idioma que se hizo después de FORTRAN, tengo dudas de que AI haya despegado con eso. LISP no era solo un "mejor candidato" que FORTRAN, sino que también resultó (¡quizás por casualidad!) Ser un candidato bastante bueno .
Quadrescence

Usted explica una de las razones por las que Lisp tenía una ventaja (financiación), pero concluyó que " la razón por la cual el ceceo fue mejor para la IA ya no es el caso".
Mark C

Perdí el siguiente comentario en el que estaba trabajando, pero espero volver y terminar más tarde.
Mark C

3

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.


2
Debe tener en cuenta al hablar sobre productos comerciales (y considero que los contendientes del desafío DARPA son tan, ya que fueron creados bajo restricciones de tiempo y presupuesto) que LISP no es un cajero automático de lenguaje comúnmente conocido y, por lo tanto, los programadores competentes de LISP son difíciles para encontrar y probablemente caro (y / o excéntricos, no son buenos miembros para el equipo promedio). Por lo tanto, tiene sentido desde el punto de vista económico usar otra cosa incluso si LISP podría ser "mejor" en ello (sin decir que necesariamente es así, solo que los datos que presenta no son concluyentes para afirmar que no lo es).
Jwent

3
No hay mucha "inteligencia" en esos programas. Es mucho procesamiento de señales, etc. Los programas de ajedrez tampoco usan IA. Es principalmente fuerza bruta, búsqueda altamente optimizada + algunas otras cosas.
Rainer Joswig el

"LISP no es un cajero automático de lenguaje conocido y, por lo tanto, los programadores competentes de LISP son difíciles de encontrar y probablemente caros": Acabo de comenzar a aprender Common Lisp y no parece nada difícil. OK, convertirse en un gurú de Lisp puede llevar mucho tiempo, pero no creo que sea difícil encontrar programadores dispuestos a aprender Lisp si se les da la oportunidad de trabajar en proyectos concretos.
Giorgio

3

@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 evalfunció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.


1
Las propias palabras de John McCarthy: www-formal.stanford.edu/jmc/history/lisp/lisp.html

@ Thorbjørn: Gracias por ese enlace. Aunque utilicé a Lisp durante muchos años, nunca presté mucha atención a su génesis.
Mike Dunlavey

Aunque Prolog es bueno como cálculo simbólico, no diría que está estrechamente relacionado con Lisp: Lisp se basa en el cálculo lambda, Prolog en lógica de primer orden (dos modelos diferentes de cálculo).
Giorgio

@Giorgio: ¿Los antepasados ​​y primos de Prolog están escritos principalmente en qué? Ceceo. Programa de deducción de Fischer Black, Micro-Planificador, etc. Para mí, un buen libro sobre esto es Fundamentos deductivos de la programación de computadoras .
Mike Dunlavey

"¿Los antepasados ​​y primos de Prolog están escritos principalmente en qué?": Ah, bien, querías decir que están estrechamente relacionados en el sentido de que uno se usó para implementar el otro, no es que sigan un paradigma similar.
Giorgio

1

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.