online - haskell tutorial
ComparaciĆ³n Haskell vs. Prolog (5)
¿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?
En realidad, solo hay 2 idiomas:
- Lenguaje de máquina
- Lenguaje humano
Todos los otros idiomas intermedios son meramente traductores y nada más. Cuando usamos el lenguaje de máquina, debemos pensar como la máquina y al usar lenguajes humanos, pensamos como humanos.
El verdadero trabajo de un programador es pensar de ambas maneras. Algunas herramientas de programación como el ensamblador obligan al programador a pasar mucho más tiempo pensando como la máquina. Otras herramientas como Prolog nos permiten dedicar más tiempo a pensar como humano.
Hay una multa que se paga en cada extremo, ya sea en rendimiento o en costo.
Si la lógica comercial de su aplicación se puede reducir a un conjunto de reglas y su resultado a un conjunto de objetivos (por ejemplo, escribir un juego 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.
Prolog es principalmente un lenguaje dirigido a problemas lógicos, especialmente de la IA y los campos 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, se adapta mucho mejor a los problemas de cómputo.
Wikipedia en programación declarativa:
En informática, la programación declarativa es un paradigma de programación que expresa la lógica de un cálculo sin describir su flujo de control. Intenta minimizar o eliminar los efectos secundarios al describir lo que debe lograr el programa, en lugar de describir cómo lograrlo. Esto está en contraste con la programación imperativa, que requiere una descripción detallada del algoritmo que se ejecutará.
La programación declarativa considera los programas como teorías de una lógica formal, y los cálculos como deducciones en ese espacio lógico. La programación declarativa se ha vuelto de particular interés recientemente, ya que puede simplificar mucho la escritura de programas paralelos.
Wikipedia en programación funcional:
En informática, la programación funcional es un paradigma de programación que trata la computación como la evaluación de las funciones matemáticas y evita los datos de estado y mutables. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en la década de 1930 para investigar la definición de funciones, la aplicación de funciones y la recursión. Muchos lenguajes de programación funcionales se pueden ver como adornos del cálculo lambda.
En resumen, un lenguaje declarativo declara un conjunto de reglas sobre qué salidas deberían resultar de las entradas y utiliza 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 AGREGADA: ninguna que yo sepa, pero puedes translate Haskell a Prólogo o implement Prolog en Haskell :)
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 cantidad de argumentos y calcula un valor.
Prolog, por otro lado, no tiene funciones. En cambio, los predicados se usan para probar un "teorema". Los predicados de Prolog no calculan un valor, pueden responder "sí" o "no" y opcionalmente unir variables de entrada a valores:
La utilidad de la programación funcional y lógica a menudo se superponen. La programación funcional ha ganado bastante tracción últimamente, mientras que Prolog sigue siendo un lenguaje nicho, debido al hecho de que es mucho más diferente de los conceptos comunes de funciones y métodos de programación orientada a objetos que la programación funcional, y a menudo se considera (muy) difícil de aprender.
Ciertos problemas se vuelven casi triviales para implementar en Prolog, especialmente en combinación con los solucionadores de restricciones .
Puede leer más sobre programación lógica en Wikipedia .
Puede encontrar el documento Escape from Zurg: Un ejercicio en la programación de 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 clase para representar los problemas de búsqueda en general. 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 tipo Haskell hace que resulte más fácil encontrar buenas representaciones de estados de búsqueda y movimientos de estado a estado. .
En cuanto a la pregunta de la biblioteca lógica: si no existe, debería ser posible construir una de varias maneras. The Reasoned Schemer construye capacidades de razonamiento lógico en Scheme. Los capítulos 33-34 de PLAI discuten Prolog e implementan Prolog. Estos autores están creando puentes entre Scheme y Prolog. Los creadores de PLT Scheme han creado uno de sus lenguajes, un Lazy Scheme, después de la función de evaluación perezosa de Haskell. El papel de LogicT Oleg Kiselyov es brillante como de costumbre: empuja el límite de lo que es posible en muchos idiomas. También hay un ejemplo de programación lógica en Haskell Wiki.
- El esquema razonado de Daniel P. Friedman, William E. Byrd y Oleg Kiselyov
- Lenguajes de programación: aplicación e interpretación por Shriram Krishnamurthi
- LogicT
- Programación lógica en Haskell Wiki