artificial-intelligence - uva - swi prolog down
¿Cómo funciona Prolog técnicamente? ¿Qué hay debajo del capó? (7)
Quiero aprender más sobre los aspectos internos de Prolog y entender cómo funciona esto.
Sé cómo usarlo. Pero no cómo funciona internamente. ¿Cuáles son los nombres de los algoritmos y conceptos utilizados en Prolog?
Probablemente construya algún tipo de estructura de árbol o gráfico de objeto dirigido, y luego, tras consultas, recorre ese gráfico con un algoritmo sofisticado. Una primera búsqueda de profundidad tal vez. Puede haber algún código fuente, pero sería genial leer sobre él desde una perspectiva de alto nivel primero.
Soy realmente nuevo en AI y comprendo que Prolog parece ser una excelente manera de comenzar, ¿eh? Mi idea es intentar reconstruir algo similar y omitir por completo la parte del analizador. Necesito saber las direcciones en las que tengo que hacer mis esfuerzos de investigación.
¿Cuáles son los nombres de los algoritmos y conceptos utilizados en Prolog?
- Programación lógica
- Búsqueda de backtracking por primera vez en profundidad
- Unification
Vea Sterling & Shapiro, The Art of Prolog (MIT Press) para la teoría detrás de Prolog.
Probablemente construya algún tipo de estructura de árbol o gráfico de objeto dirigido, y luego, tras consultas, recorre ese gráfico con un algoritmo sofisticado. Una primera búsqueda de profundidad tal vez.
No construye el gráfico explícitamente, eso ni siquiera sería posible con infinitos espacios de búsqueda. Vea los primeros capítulos de Russell & Norvig para el concepto de búsqueda de espacio de estado. Sí, hace una búsqueda en profundidad con retroceso, pero no, eso no es muy sofisticado. Es muy conveniente y programar estrategias de búsqueda alternativas no es terriblemente difícil en Prolog.
Entender que Prolog parece ser una excelente manera de comenzar, ¿eh?
Depende de lo que quieras hacer, pero conocer Prolog ciertamente no duele. Es una forma muy diferente de ver la programación. Conocer Prolog me ayudó a entender la programación funcional muy rápidamente.
Mi idea es intentar reconstruir algo similar y omitir por completo la parte del analizador
¿Quiere decir omitir la sintaxis de Prolog? Si está familiarizado con Scheme o Lisp, consulte la sección 4.4 de Abelson & Sussman donde explican cómo implementar una variante de programación lógica de Scheme en Scheme.
AI es un campo amplio, Prolog solo toca IA simbólica. En cuanto a Prolog, el funcionamiento interno es demasiado complejo para explicarlo aquí, pero buscar en Google le dará muchos recursos. Por ejemplo, http://www.amzi.com/articles/prolog_under_the_hood.htm .
Consulte también artículos de Wikipedia para conocer otras áreas de AI.
El estándar central ISO para Prolog también contiene un modelo de ejecución. El modelo de ejecución es interesante ya que proporciona un buen modelo de construcciones de control como cut! / 0, if-then-else (->) / 2, catch / 3 y throw / 1. También explica cómo lidiar con las variables desnudas.
La presentación en el estándar central ISO no es tan mala. Cada construcción de control se describe en forma de un caso de uso en prosa con una referencia a una máquina Prolog abstracta que consiste en una pila, etc. Luego hay imágenes que muestran la pila antes y después de la ejecución de la construcción de control.
La fuente más barata es ANSI:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+13211-1-1995+%28R2007%29
El libro de Sterling y Shapiro, mencionado por larsmans, en realidad contiene un modelo de ejecución de Prolog. Es bastante agradable y explica claramente "cómo funciona Prolog". ¡Y es un excelente libro!
También hay otras fuentes que podrías probar. En particular, algunos libros Lisp construyen intérpretes Prolog orientados pedagógicamente:
- En Lisp por paul Graham (en Common Lisp, usando - y tal vez abusando de macros)
- Paradigmas de la programación de Inteligencia Artificial por Peter Norvig (en Common Lisp)
- Estructura e interpretación de programas informáticos por Abelson y Sussman (en Scheme).
De estos, el último es el más claro (en mi humilde opinión). Sin embargo, necesitarías aprender algo de Lisp (ya sea Common Lisp o Scheme) para entenderlos.
Prolog usa un subconjunto de lógica de predicados de primer orden, llamada lógica Horn. El algoritmo utilizado para derivar respuestas se llama resolución SLD.
También es posible que desee leer sobre la máquina abstracta de Warren
típicamente, el código de prólogo se traduce a las instrucciones de WAM y luego se ejecuta de manera más eficiente.
Yo podria agregar:
Lenguajes de programación: un enfoque basado en el intérprete de Samuel N. Kamin. El libro está agotado, pero puede encontrarlo en la Biblioteca de la Universidad. Contiene una implementación de Prolog en Pascal.
"Los intérpretes Kamin en C ++" de Tim Budd ( en postdata )