Pourquoi (pas) la programmation logique?

13

Je n'ai pas encore entendu parler des utilisations d'un langage de programmation logique (comme Prolog) dans l'industrie du logiciel, et je ne connais pas son utilisation dans la programmation de loisirs ou les projets open source. Il (Prolog) est utilisé dans une certaine mesure comme langue académique (pourquoi est-il utilisé dans le milieu universitaire?).

Cela me fait me demander pourquoi utiliser la programmation logique et pourquoi pas? Pourquoi n'obtient-il aucune utilisation détectable dans l'industrie?

Anto
la source

Réponses:

8

En dehors du monde universitaire ... j'en ai entendu parler plus utilisé en IA, parfois dans les jeux (j'ai entendu dire qu'il conduisait l'IA dans la série Black & White). J'ai également entendu parler de variations utilisées pour exécuter des moteurs de règles pour certaines entreprises et des simulations économiques.

Mes suppositions par manque d'adoption généralisée sont:

  • C'est bizarre - la plupart des gens ne sont pas habitués à y programmer, et ils peuvent faire ce dont ils ont besoin dans d'autres langues.
  • Manque de support des fournisseurs - Si Microsoft a soudainement commencé à pousser Prolog # (avec tout le poids de la bibliothèque .NET et du jeu d'outils et du support formel derrière) comme The Next Big Thing - puis IBM et Oracle ont trouvé quelque chose à concurrencer, je parie que vous le verrais reprendre!
  • Manque d'intégration - je ne sais pas quelles bibliothèques sont disponibles pour Prolog - la dernière fois que j'ai vérifié qu'il n'y avait pas beaucoup de bibliothèques graphiques ou réseau, ce qui signifie qu'une "application" Prolog doit être enveloppée dans une autre application qui interagit avec le reste de la monde.
FrustratedWithFormsDesigner
la source
"une application Prolog" "doit être enveloppée dans une autre application qui interagit avec le reste du monde." C'était en fait une fonctionnalité pour nous. Nous pourrions plus facilement isoler les bits de prologue parce que l'interface était si simple.
S.Lott
@ S.Lott: D'accord, je peux voir que cela peut aussi être positif, bien que lorsque j'étais à l'école et que je voulais réellement faire une demande avec Prolog, j'ai trouvé que la plomberie et le câblage entre les pièces étaient un défi et un obstacle majeur.
FrustratedWithFormsDesigner
5

Nous l'avons utilisé pour construire des analyseurs. Il était plus facile de travailler avec que lex / yacc.

Pourquoi n'obtient-il aucune utilisation détectable dans l'industrie?

C'est sans réponse. Que signifie «détectable»? Qui doit obtenir le mémo de détection?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

Demandez à Meridian Software son offre de prologue si vous voulez des faits.

Cependant, j'ai rencontré certains obstacles à l'entrée.

Premièrement, le prologue peut être lent. Lorsqu'il y a beaucoup de règles candidates et aucune opération de coupe simple pour restreindre l'espace de recherche, cela peut prendre un certain temps pour faire quelque chose.

Deuxièmement, le prologue n'est pas procédural ou fonctionnel, donc de nombreux programmeurs rechignent à l'utiliser. (Fait intéressant, certains programmeurs rechignent également à utiliser SQL. D'ailleurs, certains programmeurs utiliseront SQL à contrecœur et feront des choses étranges comme éviter les opérations de jointure, ou affirmer que COUNT(*)c'est magiquement inefficace.)

Troisièmement, le prologue nécessite une réflexion assez claire sur les différents cas. La programmation procédurale peut être bâclée et fonctionner de manière fiable. Les déclarations non exécutables sont acceptables.

Ce qui suit est acceptable dans la plupart des cercles.

b = a + 1
if a > b: # always False

Ce genre de pensée trouble vous cause des ennuis en prologue.

S.Lott
la source
2

Un problème est que Prolog ne programme pas vraiment dans une logique de prédicat de premier ordre, ce qui est intraitable sur le plan informatique (je ne me souviens pas dans quelle mesure, mais ce n'est pas dans NP, et si vous ajoutez de l'arithmétique, c'est formellement indécidable). C'est donc une simplification.

En logique, une proposition peut être prouvée vraie, prouvée fausse ou non prouvée de toute façon. Prolog a seulement prouvé et non prouvé, «non prouvé» signifiant généralement faux. De plus, l'ordre des clauses Prolog peut affecter l'exécution, ce qui n'est pas le cas pour les clauses logiques. Au cours de mon utilisation, j'ai commencé à penser à Prolog comme un langage d'appariement de motifs plus qu'un langage logique.

Par conséquent, la programmation Prolog ne dépend pas tant de l'exactitude logique que du langage Prolog lui-même. C'est un langage utile à certains égards, mais il n'est pas du tout courant, et il n'a pas eu les avantages de l'outil et de la communauté d'un langage comme C ++.

David Thornley
la source