logic prolog logic-programming mercury curry

logic - ¿Qué es más interesante o poderoso: Curry, Mercury o Lambda-Prolog?



logic-programming (4)

Para el proyecto final en un curso de lenguajes de programación que tomé, tuvimos que integrar un evaluador de Prolog en Scheme usando continuaciones y macros. El resultado final fue que se podían mezclar libremente los códigos de Esquema y Prólogo, e incluso pasar predicados arbitrarios escritos en Esquema al motor de Prólogo.

Fue un ejercicio muy instructivo. Las primeras 12 líneas de código ( and y or ) literalmente tardaron aproximadamente 6 horas en escribir y ser correctas. Era más o menos la lógica de búsqueda, escrita de manera muy concisa usando continuaciones. El resto siguió un poco más fácilmente. Luego, una vez que agregué el algoritmo de unificación, todo funcionó.

Me gustaría preguntarle qué sistema formal podría ser más interesante de implementar desde cero / ingeniería inversa.

He examinado algunos proyectos existentes y de código abierto de sistemas de programación lógicos / declarativos. Decidí inventar algo similar en mi tiempo libre, o al menos captar la idea general de implementación.

Sería fantástico si algunos de estos sistemas proporcionaran la mayor parte del poder expresivo y la concisión de las investigaciones académicas modernas en lógica y su relación con los modelos computacionales.

¿Qué recomendarías estudiar al menos a nivel conceptual? Por ejemplo, Lambda-Prolog es interesante, particularmente porque permite relaciones de orden superior, pero AFAIK se basa en la lógica intuicionista y, por lo tanto, carece del principio del medio excluido; Eso es generalmente una desventaja para mí.

También agradecería cualquier sugerencia sobre los sistemas de programación lógica modernos que son menos populares pero más expresivos / potentes.


Prolog fue el primer lenguaje que cambió mi punto de vista en la programación. Pero luego descubrí que no era tan alto como me gustaría verlo.

Curry: solo probé con Munster CC y lo encontré un tanto inconveniente. En realidad, en este punto, decidí dejar de ignorar a Haskell.

Mercurio tiene muchas cosas que quería ver en Prolog. Tengo una muy buena expectativa sobre la posibilidad de distinguir los modos de las reglas. Los programas escritos en Mercury deberían inspirar al compilador a hacer muchas optimizaciones (supongo).


Si intentara extender un sistema basado en lógica, elegiría Prolog Cafe ya que es pequeño, de código abierto, cumple con los estándares y se puede integrar fácilmente en sistemas basados ​​en Java.


Twelf

Generaliza lambda-prolog significativamente, y es un marco lógico y un marco metalógico, así como un lenguaje de programación lógico. Si necesita un lenguaje que se centre en la lógica y en la computación, es lo mejor que conozco.