52 votes

Comparaison entre Haskell et Prolog

Quel type de problème est mieux résolu en Prolog qu'en Haskell ? Quelles sont les principales différences entre ces deux langages ?


Modifier

Existe-t-il une bibliothèque Haskell (une sorte de solveur logique) capable d'imiter les fonctionnalités de Prolog ?

37voto

gknauth Points 481

En ce qui concerne la question de la bibliothèque logique : Si elle n'existe pas, il devrait être possible d'en construire une de différentes manières. Le site Schemer raisonné intègre des capacités de raisonnement logique dans Scheme. Les chapitres 33-34 de PLAI discuter de Prolog et de l'implémentation de Prolog. Ces auteurs construisent des ponts entre Scheme et Prolog. Les créateurs de Régime PLT ont construit comme une de leurs langues un Schéma paresseux après la fonction d'évaluation paresseuse de Haskell. L'article d'Oleg Kiselyov LogicT Le papier est brillant comme d'habitude - il repousse les limites de ce qui est possible dans de nombreuses langues. Il y a également un exemple de programmation logique sur le Haskell Wiki.

32voto

Kornel Kisielewicz Points 26556

Prolog est principalement une langue ciblée à des problèmes logiques, en particulier à partir de l'AI et de la linguistique champs. Haskell est plus d'un usage général de la langue.

Prolog est déclarative (logique) de la langue, ce qui le rend plus facile à l'état logique des problèmes. Haskell est un langage fonctionnel et donc beaucoup mieux adapté aux problèmes informatiques.

Wikipédia sur la programmation déclarative:

En informatique, déclarative la programmation est un paradigme de programmation qui exprime la logique d'un le calcul sans décrivant son le contrôle de flux. Il tente de minimiser ou d'éliminer les effets secondaires par décrivant ce que le programme doit accomplir, plutôt que de décrire comment afin d'y parvenir. C'est en revanche impératif de la programmation, ce qui nécessite une détaillé description de l'algorithme exécuter.

Programmation déclarative envisager les programmes comme des théories formelles la logique et les calculs des déductions dans cette logique de l'espace. Déclarative la programmation est devenue de particulier l'intérêt récemment, comme il peut grandement simplifier l'écriture des programmes parallèles.

Wikipédia sur la programmation fonctionnelle:

En informatique, fonctionnelle la programmation est un paradigme de programmation qui traite de calcul que les évaluation de fonctions mathématiques et évite d'état et de données mutable. Il met l'accent sur l'application de fonctions, contrairement à la la programmation impérative de style, qui met l'accent sur les changements dans l'état. La programmation fonctionnelle a ses racines dans le lambda calcul, une mise en le système développé dans les années 1930 à enquêter sur la définition de la fonction, fonction de l'application, et la récursivité. De nombreux langages de programmation fonctionnelle peuvent être considérés comme des embellissements pour les lambda calcul.

En bref, un langage déclaratif déclare un ensemble de règles sur ce que les sorties doivent résultat à partir de laquelle les entrées et utilise ces règles pour en déduire une sortie d'une entrée, tandis qu'un langage fonctionnel déclare un ensemble de mathématique ou logique des fonctions qui définissent la façon dont la participation est traduit à la sortie.

Comme pour la question : aucun, que je sache, mais vous pouvez traduire Haskell à Prolog, ou de mettre en œuvre Prolog en Haskell :)

32voto

JesperE Points 34356

Prolog est un programmation logique alors que Haskell est un langage fonctionnel langue. Les langages fonctionnels sont basés sur le concept d'une fonction qui prend un certain nombre d'arguments et calcule une valeur.

Prolog, en revanche, n'a pas de fonctions. Au contraire, prédicats sont utilisés pour prouver un "théorème". Les prédicats Prolog ne calculent pas de valeur, ils peuvent répondre par "oui" ou "non" et éventuellement lier des variables d'entrée à des valeurs :

Les utilités de la programmation fonctionnelle et de la programmation logique se chevauchent souvent. La programmation fonctionnelle a gagné en popularité ces derniers temps, tandis que Prolog reste un langage de niche, en grande partie parce qu'il est beaucoup plus différent des concepts courants de fonctions et de méthodes de la POO traditionnelle que la programmation fonctionnelle, et souvent considéré comme (très) difficile à apprendre.

Certains problèmes deviennent presque triviaux à implémenter dans Prolog, surtout en combinaison avec Solveurs de contraintes .

Vous pouvez en savoir plus sur la programmation logique sur Wikipedia .

11voto

Ian Ross Points 539

Vous pourriez trouver le papier Escape from Zurg : Un exercice de programmation logique une lecture intéressante. Il présente une comparaison côte à côte de l'implémentation d'un problème de recherche simple en Prolog et Haskell, ainsi qu'un petit cadre de classes types pour représenter les problèmes de recherche de manière plus générale. La conclusion des auteurs est que l'expression d'au moins certains de ces types de problèmes est plus facile en Haskell qu'en Prolog, principalement parce que le système de types Haskell facilite la représentation des états de recherche et des déplacements d'un état à l'autre.

-7voto

Square Rig Master Points 500

En réalité, il n'y a que deux langues :

  1. Langage machine
  2. Le langage humain.

Toutes les autres langues intermédiaires ne sont que des traducteurs et rien de plus. Lorsque nous utilisons le langage machine, nous devons penser comme la machine et lorsque nous utilisons les langages humains, nous devons penser comme les humains.

Le vrai travail d'un programmeur est de penser dans les deux sens. Certains outils de programmation comme l'assembleur obligent le programmeur à passer beaucoup plus de temps à penser comme une machine. D'autres outils comme Prolog nous permettent de passer plus de temps à penser comme un humain.

Il y a une pénalité à payer à chaque extrême, soit en performance, soit en coût.

Si la logique métier de votre application peut être réduite à un ensemble de règles et sa sortie à un ensemble d'objectifs (par exemple l'écriture d'une partie d'échecs), Prolog est idéal. En revanche, si vous devez prendre l'entrée et dire à l'ordinateur comment calculer la sortie, alors un langage fonctionnel sera plus approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X