Haskell vs Prólogo de la comparación [cerrado]


¿Qué tipo de problemas se resuelven mejor en Prolog que en Haskell? ¿Cuáles son las principales diferencias entre estos dos idiomas?


Editar

¿Hay una biblioteca Haskell (una especie de solucionador lógico) que pueda imitar la funcionalidad de Prolog?

Author: nbro, 2009-12-19

5 answers

Prolog es principalmente un lenguaje dirigido a problemas lógicos, especialmente de los campos de IA y lingüísticos. Haskell es más un lenguaje de propósito general.

Prolog es un lenguaje declarativo (lógico), lo que hace que sea más fácil establecer problemas lógicos en él. Haskell es un lenguaje funcional y por lo tanto mucho más adecuado para problemas computacionales.

Wikipedia sobre programación declarativa:

En informática, declarativa la programación es un paradigma de programación que expresa la lógica de un cálculo sin describir su control de flujo. Intenta minimizar o eliminar los efectos secundarios por describiendo lo que el programa debe lograr, en lugar de describir cómo para lograrlo. Esto es en contraste con imperativo programación, que requiere un detallado descripción del algoritmo ejecutar.

Programación Declarativa considerar programas como teorías de una lógica y cálculos como deducciones en ese espacio lógico. Declarativo la programación se ha vuelto de particular interés reciente, ya que puede simplifique la escritura de programas paralelos.

Wikipedia sobre programación funcional:

En informática, funcional la programación es un paradigma de programación que trata la computación como la evaluación de funciones matemáticas y evita el estado y los datos mutables. Se enfatiza la aplicación de funciones, en contraste con el programación imperativa estilo, que enfatiza los cambios en el estado. La programación funcional tiene sus raíces en el cálculo lambda, un formal sistema desarrollado en la década de 1930 para investigar la definición de la función, aplicación de la función, y recursión. Muchos lenguajes de programación funcionales puede ser visto como adornos a la cálculo lambda.

En resumen, un lenguaje declarativo declara un conjunto de reglas sobre qué salidas deberían resultar de qué entradas y usa esas reglas para deducir una salida de una entrada, mientras que un lenguaje funcional declara un conjunto de funciones matemáticas o lógicas que definen cómo se traduce la entrada a la salida.


En cuanto a la pregunta AÑADIDA: ninguna que yo sepa, pero puedes traducir Haskell a Prolog, o implementar Prolog en Haskell:)

 28
Author: Kornel Kisielewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-02 14:07:05

Con respecto a la pregunta de la biblioteca lógica: Si no existe, debería ser posible construir una de varias maneras. El Razoned Schemer construye capacidades de razonamiento lógico en Scheme. Los capítulos 33-34 de PLAI discuten el Prolog y la implementación del Prolog. Estos autores están construyendo puentes entre Scheme y Prolog. Los creadores de PLT Scheme han construido como uno de sus lenguajes un Lazy Scheme después de la función de evaluación perezosa de Haskell. Oleg El papel de Kiselyov LogicT es brillante como de costumbre pushes él empuja los límites de lo que es posible en muchos idiomas. También hay un ejemplo de programación lógica en el Wiki de Haskell.

 36
Author: gknauth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-16 00:27:50

Prolog es un lenguaje de programación lógica, mientras que Haskell es un lenguaje funcional. Los lenguajes funcionales se basan en el concepto de una función que toma una serie de argumentos y calcula un valor.

Prolog, por otro lado, no tiene funciones. En su lugar, predicados se utilizan para probar un "teorema". Los predicados Prolog no calculan un valor, pueden responder " sí "o" no " y opcionalmente vincular variables de entrada a valores:

El la utilidad de la programación funcional y lógica a menudo se superponen. La programación funcional ha ganado un poco de tracción últimamente, mientras que Prolog sigue siendo un lenguaje de nicho, debido al hecho de que es mucho más diferente de los conceptos comunes de funciones y métodos de OOP convencional que la programación funcional, y a menudo se considera (muy) difícil de aprender.

Ciertos problemas se vuelven casi triviales de implementar en Prolog, especialmente en combinación con restricción solucionadores.

Puedes leer más sobre programación lógica en Wikipedia.

 27
Author: JesperE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-19 12:36:28

Puede encontrar el documento Escape from Zurg: Un ejercicio de Programación Lógica una lectura interesante. Muestra una comparación lado a lado de la implementación de un problema de búsqueda simple en Prolog y Haskell, junto con un pequeño marco de typeclass para representar problemas de búsqueda más generalmente. La conclusión a la que llegan los autores es que expresar al menos algunos de estos tipos de problemas en Haskell es más fácil que en Prolog, principalmente porque el sistema de tipos de Haskell hace es más fácil llegar a representaciones agradables de los estados de búsqueda y se mueve de estado a estado.

 11
Author: Ian Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-21 18:02:46

En realidad solo hay 2 idiomas:

  1. Lenguaje de máquina
  2. Lenguaje humano.

Todos los demás idiomas en el medio son meramente traductores y nada más. Cuando usamos el lenguaje máquina debemos pensar como la máquina y cuando usamos lenguajes humanos pensamos como humanos.

El verdadero trabajo de un programador es pensar en ambos sentidos. Algunas herramientas de programación como el ensamblador obligan al programador a pasar mucho más tiempo pensando como la máquina. Otro herramientas como Prolog nos permiten pasar más tiempo pensando como un humano.

Hay una penalización a pagar en cada extremo, ya sea en rendimiento o en costo.

Si la lógica de negocios de su aplicación puede reducirse a un conjunto de reglas y su resultado a un conjunto de objetivos (por ejemplo, escribir una partida de Ajedrez), entonces Prolog es ideal. Por otro lado, si necesita tomar la entrada y decirle a la computadora cómo calcular la salida, entonces un lenguaje funcional sería más apropiado.

 -8
Author: Square Rig Master,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-19 14:25:04