2010-10-13 52 views
17

Como muchos programadores estudié Prolog en la universidad, pero muy poco. Entiendo que Prolog y Datalog están estrechamente relacionados, ¿pero Datalog es más simple? Además, creo que leí que Datalog no depende del orden de las cláusulas lógicas, pero no estoy seguro de por qué esto es una ventaja. CLIPS es supuestamente completamente diferente, pero es demasiado sutil para que lo entienda. ¿Puede alguien proporcionar un resumen general de los idiomas sobre los otros idiomas?Datalog vs CLIPS vs Prolog

+0

http: //en.wikipedia.org/wiki/Datalog – starblue

Respuesta

15

datalog es un subconjunto de prolog. el subconjunto que lleva registro de datos tiene dos cosas en mente:

  1. adoptar una API que apoyaría reglas y consultas
  2. asegúrese de que todas las consultas terminan

Prolog es Turing completo. datalog no es.

eliminando el registro de datos, veamos cómo se compara el prólogo con los clips.

La experiencia de prolog es la "resolución de problemas" mientras que los clips son un "sistema experto". Si lo entiendo correctamente, la "resolución de problemas" involucra la experiencia usando código y datos. los "sistemas expertos" utilizan principalmente estructuras de datos para expresar su experiencia. ver http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systems

otra forma de verlo es:

sistemas expertos operan en la premisa de que la mayoría (si no todos) se conocen los resultados. todos estos resultados se compilan en datos y luego se incorporan a un sistema experto. darle al sistema experto un escenario, el sistema experto calcula el resultado de los datos compilados, también conocidos como base de conocimiento. siempre es un tipo de pensamiento "un número par más un número par siempre es par".

los sistemas de solución de problemas tienen una visión incompleta del problema. entonces uno comienza con modelar datos y comportamiento, que comprendería la base de conocimiento (esto le da justicia al término "caso de esquina") y termina con "si sumamos dos a seis, terminamos con ocho. Es ocho divisible por dos? entonces es incluso "

+1

Relativo a Prolog, Datalog no tiene símbolos de función (y por lo tanto no hay estructuras orientadas a árbol para trabajar, solo constantes y variables) y es puramente declarativo (sin cortes, y no varía el comportamiento reordenando las cláusulas). –

+2

Para CLIPS (un sistema de producción con ascendencia OPS5), la idea es "deducir" nuevos hechos (o acciones de incendios) cada vez que se produce una coincidencia con hechos existentes en la base de datos de hechos, y la base de datos de hechos puede cambiar durante el cálculo. Esto es "hacky/scruffy" y débil en cuanto a teoría. Para Prolog, la filosofía es "probar" un teorema de implicaciones y hechos conocidos en la base de datos que no debería cambiar. Esto se basa en la teoría del sonido (lógica de primer orden basada en las cláusulas de Horn), que puede debilitarse a voluntad mediante el uso de elementos "no lógicos" del lenguaje (similar a agregar GOTO a un buen código). –

+0

... y finalmente, puede implementar el forward-chainer en Prolog. –

21

La diferencia entre CLIPS y Prolog/Datalog es que CLIPS es un "sistema de reglas de producción" que opera con encadenando: da un conjunto de hechos y reglas, intentará hacer todas las derivaciones posibles de nuevos hechos y almacena esos en la memoria. A continuación, se responde a una consulta comprobando si coincide con algo en la tienda de hechos. Así, en los clips, si tiene (pseudo-sintaxis):

parent(X,Y) => child(Y,X) 
parent(john,mary) 

derivará inmediatamente child(mary,john) y recordar ese hecho. Esto puede ser muy rápido, pero impone restricciones al posible conjunto de reglas y ocupa memoria.

Prólogo y registro de datos operan por encadenamiento hacia atrás, lo que significa que una consulta (llamado predicado) es contestada por tratar de demostrar la consulta, es decir, la ejecución del programa Prolog/registro de datos. Prolog es un lenguaje de programación completo de Turing, por lo que cualquier algoritmo puede implementarse en él.

Datalog es un subconjunto completo de Turing de Turing que no permite, por ejemplo, la negación. Su principal ventaja es que cada programa Datalog termina (sin bucles infinitos). Esto lo hace útil para las denominadas "bases de datos deductivas", es decir, bases de datos con reglas además de hechos.

+4

En particular, Datalog es para "consultar bases de datos relacionales" y es equivalente a SQL recursivo. Ver [esta presentación] (http://webdam.inria.fr/College/090512Abiteboul.pdf). La base de datos [Datomic] (http://www.flyingmachinestudios.com/programming/datomic-for-five-year-olds/) admite consultas de registro de datos. –

+1

A diferencia de Prolog, nada en la semántica del registro de datos especifica el encadenamiento hacia atrás. Tanto el encadenamiento hacia adelante como hacia atrás pueden ser y son usados. – seanmcl

+0

@seanmcl El encadenamiento directo también es posible en Prolog utilizando [reglas de manejo de restricciones] (https://en.wikipedia.org/wiki/Constraint_Handling_Rules). –

Cuestiones relacionadas