Pregunta

Por programación lógica me refiero al sub paradigma de los lenguajes de programación declarativos. No confunda esta pregunta con " ¿Qué problemas puede resolver con if-then-else? & Quot;

Un lenguaje como Prolog es muy fascinante, y vale la pena aprender por aprender, pero me pregunto qué clase de problemas del mundo real se expresan y resuelven mejor con ese lenguaje. ¿Hay mejores idiomas? ¿Existe la programación lógica con otro nombre en lenguajes de programación más modernos? ¿Es la versión cínica de la respuesta una variante de la Paradoja de Python ?

¿Fue útil?

Solución

Creación de prototipos .

El prólogo es dinámico y lo ha sido durante 50 años. El compilador es liberal, la sintaxis minimalista y " haciendo cosas " Es fácil, divertido y eficiente. SWI-Prolog tiene un tracer (debugger!) , e incluso un trazador gráfico . Puede cambiar el código sobre la marcha, utilizando make / 0 , puede cargar módulos dinámicamente, agregar algunas líneas de código sin dejar el intérprete o editar el archivo que está ejecutando sobre la marcha con edit (1) . ¿Crees que has encontrado un problema con el predicado foobar / 2 ?

?- edit(foobar).

Y tan pronto como salga del editor, esa cosa se volverá a compilar. Claro, Eclipse hace lo mismo para Java, pero Java no es exactamente un lenguaje de creación de prototipos.

Además de las cosas puras de creación de prototipos, Prolog es increíblemente adecuado para traducir una pieza de lógica en código . Por lo tanto, los probadores automáticos y ese tipo de cosas se pueden escribir fácilmente en Prolog.

El primer intérprete de Erlang fue escrito en Prolog, y por una razón, ya que Prolog es muy adecuado para el análisis y la codificación de la lógica que se encuentra en los árboles de análisis . De hecho, ¡Prolog viene con un analizador incorporado! No, no es una biblioteca, está en la sintaxis, es decir, DCG s .

Prolog se usa mucho en PNL, particularmente en sintaxis y semántica computacional .

Pero, Prolog está infrautilizado y subestimado. Desafortunadamente, parece tener un aspecto académico o "inutilizable para cualquier propósito real" estigma. Pero puede ser muy útil en muchas aplicaciones del mundo real que involucran hechos y el cálculo de relaciones entre hechos. No es muy adecuado para el procesamiento de números, pero CS no es solo para el procesamiento de números.

Otros consejos

Desde Prolog = Unificación sintáctica + Encadenamiento hacia atrás + REPL ,

la mayoría de los lugares donde se usa la unificación sintáctica también es un buen uso para Prolog.

  

Usos de la unificación sintáctica

     
      
  • transformaciones AST
  •   
  • Inferencia de tipos
  •   
  • reescritura de términos
  •   
  • demostración de teoremas
  •   
  • procesamiento de lenguaje natural
  •   
  • coincidencia de patrones
  •   
  • Generación de casos de prueba combinatorios
  •   
  • Extraiga las subestructuras de datos estructurados, como un documento XML
  •   
  • Cálculo simbólico, es decir, cálculo
  •   
  • Bases de datos deductivas
  •   
  • Sistemas expertos
  •   
  • Inteligencia Artificial
  •   
  • análisis
  •   
  • idiomas de consulta
  •   

Programación lógica de restricciones (CLP)

Ya se han mencionado muchos casos de uso muy buenos y adecuados de la programación lógica. Me gustaría complementar la lista existente con varias tareas de un área de aplicación extremadamente importante de la programación lógica:

La programación lógica se combina a la perfección, de manera más transparente que otros paradigmas, con restricciones , lo que da como resultado un marco denominado Programación lógica de restricciones .

Esto conduce a solucionadores de restricciones dedicados para diferentes dominios , como:

  • CLP (FD) para intérpretes
  • CLP (B) para Booleans
  • CLP (Q) para números racionales
  • CLP (R) para números de punto flotante .

Estos solucionadores de restricciones dedicados llevan a varios casos de uso importantes de programación lógica que no se han mencionado, algunos de los cuales se muestran a continuación.

Al elegir un sistema Prolog, la potencia y el rendimiento de sus solucionadores de restricciones a menudo se encuentran entre los factores decisivos, especialmente para los usuarios comerciales.

CLP (FD) & # 8212; Razonamiento sobre enteros

En la práctica, CLP (FD) es una de las aplicaciones más importantes de la programación lógica, y se utiliza para resolver tareas de las siguientes áreas, entre otras:

  
      
  • programando
  •   
  • asignación de recursos
  •   
  • planeando
  •   
  • optimización combinatoria
  •   

Consulte para más información y varios ejemplos.

CLP (B) & # 8212; Restricciones booleanas

CLP (B) se usa a menudo en relación con:

  
      
  • Resolución de SAT
  •   
  • verificación del circuito
  •   
  • conteo combinatorio
  •   

Consulte .

CLP (Q) & # 8212; Números racionales

CLP (Q) se utiliza para resolver clases importantes de problemas que surgen en Operaciones & nbsp; Investigación :

  
      
  • programación lineal
  •   
  • programación lineal de enteros
  •   
  • programación lineal de enteros mixtos
  •   

Consulte .

Prolog es ideal para problemas no numéricos. Este artículo ofrece algunos ejemplos de algunas aplicaciones de Prolog y puede ayudarlo a comprender el tipo de problemas. que podría resolver.

Una de las cosas que Prolog te ofrece de forma gratuita es un algoritmo de búsqueda de seguimiento: puedes implementarlo tú mismo, pero si tu problema se resuelve mejor al tener ese algoritmo disponible, es bueno usarlo.

Las dos cosas que he visto que son buenas son las pruebas matemáticas y la comprensión del lenguaje natural.

Prolog es excelente para resolver rompecabezas y cosas por el estilo. Dicho esto, en el dominio de la resolución de rompecabezas hace que la resolución de rompecabezas fácil / media sea más fácil y la resolución de rompecabezas más complicada. Aún así, escribir solucionadores para rompecabezas de grillas y similares, como Hexiom, Sudoku o Nurikabe no es especialmente difícil.

Una respuesta simple es "sistemas de compilación". El lenguaje utilizado para crear Makefiles (al menos, la parte para describir las dependencias) es esencialmente un lenguaje de programación lógico, aunque en realidad no es un " puro " lenguaje de programación lógico.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top