ventajas significa que programacion logica funcional ejemplos desventajas componentes functional-programming prolog logic logic-programming

functional-programming - significa - programacion logica y funcional pdf



¿Cuáles son los mejores usos de la Programación Lógica? (7)

Una de las cosas que Prolog le ofrece de forma gratuita es un algoritmo de búsqueda de retroceso: puede implementarlo usted mismo, pero si su problema se resuelve mejor teniendo ese algoritmo disponible, entonces es bueno usarlo.

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

Por Programación Lógica me refiero al subparadigma de los lenguajes de programación declarativos. No confundas esta pregunta con "¿Qué problemas puedes resolver con if-then-else?"

Un lenguaje como Prolog es muy fascinante, y vale la pena aprender por el bien de aprender, pero me pregunto qué clase de problemas del mundo real se expresan mejor y se resuelven con ese lenguaje. ¿Hay mejores idiomas? ¿La programación lógica existe por 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 ?


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


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


Una respuesta simple es "construir sistemas". El lenguaje utilizado para construir Makefiles (al menos, la parte para describir dependencias) es esencialmente un lenguaje de programación lógica, aunque no es realmente un lenguaje de programación lógica "pura".


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 son un buen uso para Prolog.

Usos de unificación sintáctica

  • Transformaciones AST
  • Tipo de Inferencia
  • Reescritura de términos
  • Prueba del teorema
  • Procesamiento natural del lenguaje
  • La coincidencia de patrones
  • Generación de casos de prueba combinatoria
  • Extraiga subestructuras de datos estructurados, como un documento XML
  • Cálculo simbólico, es decir, cálculo
  • Bases de datos deductivas
  • Sistemas expertos
  • Inteligencia artificial
  • Parsing
  • Idiomas de consulta

Programación Lógica de Restricciones (CLP)

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

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

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

  • CLP (FD) para enteros
  • CLP (B) para booleanos
  • CLP (Q) para números racionales
  • CLP (R) para números de coma flotante .

Estos solucionadores de restricciones dedicadas conducen 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) - 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:

  • programación
  • Asignación de recursos
  • planificación
  • optimización combinatoria

Ver clpfd para más información y varios ejemplos.

CLP (B) - Restricciones booleanas

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

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

Ver clpb .

CLP (Q) - Números racionales

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

  • programación lineal
  • programación lineal entera
  • Programación lineal entera mixta

Ver clpq .


Prototipos .

Prolog es dinámico y lo ha sido durante 50 años. El compilador es liberal, la sintaxis es minimalista y "hacer cosas" es fácil, divertido y eficiente. SWI-Prolog tiene un trazador incorporado (¡depurador!) E incluso un trazador gráfico . Puede cambiar el código sobre la marcha, usando make/0 , puede cargar dinámicamente módulos, agregar algunas líneas de código sin abandonar 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 con Java, pero Java no es exactamente un lenguaje de creación de prototipos.

Además del prototipado puro, Prolog es increíblemente adecuado para traducir un fragmento de lógica en código . Entonces, los demostradores 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 integrado. 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 poco apreciado. Desafortunadamente, parece tener un estigma académico o "inutilizable para cualquier propósito real". Pero se puede usar muy bien en muchas aplicaciones del mundo real que involucran hechos y el cálculo de relaciones entre hechos. No es muy adecuado para el crujido de números, pero CS no se trata solo de números crujientes.