2009-10-03 6 views

Répondre

3

Par rapport à quoi exactement? Prolog est vraiment juste la mise en œuvre prééminente de la programmation logique, donc si votre question est vraiment sur une comparaison des paradigmes de programmation bien c'est vraiment très large et vous devriez regarder here. Si votre question porte plus spécifiquement sur prolog vs les langages OO les plus courants, je dirais que vous comparez vraiment des pommes à des oranges - le "advantage" (tel qu'il est) est juste une façon différente de penser à le monde, et parfois changer la façon dont vous posez une question fournit un meilleur outil pour résoudre un problème.

+0

par rapport à C/C++ en particulier ... résoudre un problème de 8 reines est par exemple, plus facile dans Prolog (que je viens de découvrir). Pourquoi C vs Prolog aime-t-il les pommes et les oranges? Est-ce que tous les programmes C ne peuvent pas être convertis en Prolog et vice versa? – Lazer

+2

Il peut (en théorie - c'est-à-dire je ne peux pas penser à un contre-exemple de manière désinvolte) mais juste parce que vous pouvez ne signifie pas que vous devriez. Regardez-le de cette façon: si c'était le bon choix la plupart du temps, il y aurait beaucoup plus de programmeurs prologues qu'il n'y en a. – annakata

+0

@annakata oui, je suis d'accord. mais je ne sais pas pourquoi (il y a moins de programmeurs Prolog) – Lazer

3

En gros, si votre programme peut être facilement déclaré des déclarations logiques formelles declaritive, Prolog (ou une autre langue dans cette famille) donneront le meilleur temps de développement. Si vous utilisez un bon compilateur Prolog, vous obtiendrez également les meilleures performances et la meilleure fiabilité, car le moteur aura fait l'objet de nombreux efforts de conception et de développement.

Essayer de mettre en œuvre ce genre de chose dans une autre langue a tendance à être un gâchis. La solution la plus propre et la plus générale consiste probablement à implémenter votre propre moteur d'unification. Même les implémentations naïves ne sont pas vraiment triviales, la Warren Abstract Machine a un livre ou deux écrit à ce sujet, et faire mieux va au moins impliquer une bonne partie de la recherche, en lisant des papiers induisant la migraine.

Bien sûr, dans le monde réel, des éléments clés de votre programme peuvent bénéficier de Prolog, mais beaucoup d'autres choses est mieux traitée dans une autre langue. Voilà pourquoi beaucoup de compilateurs Prolog peut interfacer avec, par exemple, C.

1

Je dirais que Prolog fonctionne bien pour les problèmes où une base de connaissances constitue une partie importante de la solution. Surtout lorsque la structure de connaissance est adaptée pour être codée en tant que règles logiques.

Par exemple, l'écriture d'un interprète en langage naturel pour un domaine de problème particulier, il faudrait beaucoup de connaissances dans ce domaine. Les systèmes experts relèvent également de cette catégorie axée sur les connaissances.

Il est aussi une langue agréable à explorer des solutions à des énigmes logiques ;-)

+0

ouais, je viens de résoudre le problème des huit reines avec ça, et c'était si facile ... je ne sais pas pourquoi on n'utilise pas Prolog plus souvent. – Lazer

+3

@eSKay - deux grands, A). mauvais outil pour le syndrome du travail, parce que la majorité des problèmes d'affaires s'avèrent être plus sur la manipulation des objets et OO est par conséquent un paradigme très répandu et réussi B). prolog est incroyablement difficile à creuser, et un cauchemar impie à déboguer – annakata

2

L'un des meilleurs moments pour utiliser Prolog est quand vous avez un problème à résoudre avec adapté backtracking. Et c'est quand vous avez beaucoup de solutions possibles à un problème, et peut-être que vous voulez les ordonner à inclure/exclure selon un certain contexte. Cela suggère beaucoup d'ambiguïté ... comme dans le traitement du langage naturel.

Il serait certainement beaucoup plus ordonné d'écrire toutes les réponses possibles en tant que clauses Prolog. Avec un langage impératif tout ce que je pense que vous pouvez vraiment faire est d'écrire une déclaration CASE géante (vraiment géante), ce qui n'est pas trop amusant.

2

Les choses qui sont inhérentes à Prolog:

  • pattern matching!
  • tout ce qui implique une première recherche en profondeur.(En Java si vous voulez faire un DFS, vous pouvez le mettre en œuvre par un motif de visiteur ou faire un (vraiment géant) CASE
  • unification
  • ??

Paul Graham, est un Lisp Cependant, il soutient que Prolog est vraiment bon pour 2% des problèmes, je suis moi-même comme de baisser ce 2% et de comprendre comment il a trouvé un tel nombre. "moins de code, plus de puissance" Prolog est définitivement "moins de code" et si vous optez pour les dernières versions, vous aurez plus de puissance aussi. olog est le fait que je n'ai pas d'accès aléatoire dans les listes (pas de tableaux).

2

Prolog est un langage de programmation de très haut niveau. Une analogie pourrait être (Prolog: C) en tant que (C: Assembler)

Pourquoi n'est pas utilisé beaucoup alors? Je pense que cela a à voir avec les machines que nous utilisons; Ils sont basés sur des machines de Turing. C peut être compilé automatiquement en code byte, mais Prolog est compilé pour fonctionner sur une émulation de la machine abstraite Warren, donc, ce n'est pas très efficace. Prolog est également basé sur une logique de premier ordre qui n'est pas capable de résoudre tous les problèmes résolubles d'une manière déclarative, donc, à un certain point, vous devez vous appuyer sur un code de type impératif.

+0

Pouvez-vous donner une instance d'un problème qui n'est pas résoluble dans Prolog? – alexraasch

+0

@alexraasch Prolog est complet, il est donc capable de résoudre le solvable. Cependant, si vous essayez de résoudre, par exemple, un système d'équations avec prologue, votre code serait impératif. –

1

Je programme (pour le plaisir) depuis plus d'un an avec Swi-Prolog. Je pense que l'un des avantages de Prolog est que Prolog n'a pas d'effets secondaires: Prolog est un langage qui n'a pas d'utilité pour les variables (locales ou de classe), cela force le programmeur à ne pas utiliser de variables. Les objets Prolog n'ont pas d'état, en quelque sorte. Je pense. J'ai écrit la ligne de commande Prolog (pas de GUI, sauf quelques tests XPCE): c'est comme un train sur une piste.

Questions connexes