¿Por qué (no) programación lógica?

13

Todavía no he oído hablar de ningún uso de un lenguaje de programación lógico (como Prolog) en la industria del software, ni sé de su uso en la programación de pasatiempos o proyectos de código abierto. Sin embargo, (Prolog) se usa como lenguaje académico en cierta medida (¿por qué se usa en la academia?).

Esto me hace preguntarme, ¿por qué deberías usar programación lógica y por qué no? ¿Por qué no está obteniendo ningún uso industrial detectable?

Anto
fuente

Respuestas:

8

Fuera de la academia ... He oído que se usa más en IA, a veces en juegos (escuché que impulsó la IA en la serie Black & White). También he oído hablar de variaciones utilizadas para ejecutar motores de reglas para ciertas empresas y simulaciones económicas.

Mis conjeturas por falta de adopción generalizada son:

  • Es extraño: la mayoría de las personas no están acostumbradas a programar en él y pueden hacer lo que necesitan en otros idiomas.
  • Falta de soporte del proveedor: si Microsoft repentinamente comenzó a presionar Prolog # (con todo el peso de la biblioteca .NET y el conjunto de herramientas y el soporte formal) como The Next Big Thing, y luego IBM y Oracle idearon algo para competir, apuesto a que ¡Lo vería recoger!
  • Falta de integración: no sé qué bibliotecas están disponibles para Prolog; la última vez que verifiqué que no había muchas bibliotecas gráficas o de red, lo que significa que una "aplicación" de Prolog tiene que estar envuelta en otra aplicación que interactúe con el resto del mundo.
FrustratedWithFormsDesigner
fuente
"una aplicación de Prolog" tiene que estar envuelta en otra aplicación que interactúa con el resto del mundo ". Eso fue realmente una característica para nosotros. Podríamos aislar más fácilmente los bits de prólogo porque la interfaz era muy simple.
S.Lott
@ S.Lott: Ok, puedo ver eso como posiblemente positivo, aunque cuando estaba en la escuela y quería presentar una solicitud con Prolog, encontré que la tubería y el cableado entre las piezas eran un gran desafío y obstáculo.
FrustratedWithFormsDesigner
5

Lo usamos para construir analizadores. Era más fácil trabajar con lex / yacc.

¿Por qué no está obteniendo ningún uso industrial detectable?

Esto no tiene respuesta. ¿Qué significa "detectable"? ¿Quién necesita obtener la nota de detección?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

Pregúntele a Meridian Software acerca de su oferta de prólogo si desea información.

Sin embargo, hay algunas barreras de entrada que he experimentado.

Primero, el prólogo puede ser lento. Cuando hay muchas reglas candidatas y no hay operaciones de corte simples para restringir el espacio de búsqueda, puede llevar un tiempo hacer algo.

En segundo lugar, el prólogo no es procesal o funcional, por lo que muchos programadores se resisten a usarlo. (Curiosamente, algunos programadores también se resisten a usar SQL. Por lo demás, algunos programadores usarán SQL de mala gana y harán cosas extrañas como evitar operaciones de unión o afirmar que COUNT(*)es mágicamente ineficiente).

Tercero, el prólogo requiere un pensamiento bastante claro sobre cuáles son los diferentes casos. La programación procesal puede ser descuidada y aún así funcionar de manera confiable. Las declaraciones no ejecutables son aceptables.

Lo siguiente es aceptable en la mayoría de los círculos.

b = a + 1
if a > b: # always False

Este tipo de pensamiento turbio te mete en problemas en el prólogo.

S.Lott
fuente
2

Un problema es que Prolog no está realmente programando en lógica de predicado de primer orden, que es computablemente intratable (no recuerdo hasta qué punto, pero no está en NP, y si le agregas aritmética es formalmente indecidible). Por lo tanto, es una simplificación.

En lógica, una proposición puede ser probada como verdadera, falsa o no ser probada de ninguna manera. Prolog solo ha sido probado y no probado, "no probado" generalmente significa falso. Además, el orden de las cláusulas Prolog puede afectar la ejecución, que no es el caso de las cláusulas lógicas. En el curso en que lo usé, comencé a pensar en Prolog como un lenguaje de coincidencia de patrones más que un lenguaje lógico.

Por lo tanto, la programación de Prolog no depende tanto de la corrección lógica como del lenguaje Prolog en sí. Es un lenguaje útil en algunos aspectos, pero no está cerca de la corriente principal, y no ha tenido la herramienta y los beneficios para la comunidad de un lenguaje como C ++.

David Thornley
fuente