Question

Par programmation logique, j'entends le sous-paradigme des langages de programmation déclaratifs. Ne confondez pas cette question avec "Quels problèmes pouvez-vous résoudre avec if-then-else?"

Un langage comme Prolog est très fascinant et mérite d’être appris pour apprendre, mais je dois me demander quelle classe de problèmes du monde réel est le mieux exprimée et résolue par un tel langage. Y a-t-il de meilleures langues? La programmation logique existe-t-elle sous un autre nom dans des langages de programmation plus modernes? La version cynique de la réponse est-elle une variante du Python Paradox ?

Était-ce utile?

La solution

Prototypage .

Prolog est dynamique et ce depuis 50 ans. Le compilateur est libéral, la syntaxe minimaliste et "fait des choses" est facile, amusant et efficace. SWI-Prolog a un traçeur (débogueur!) Intégré et même un traceur graphique . Vous pouvez modifier le code à la volée en utilisant make / 0 , vous pouvez charger des modules de manière dynamique, ajouter quelques lignes de code sans quitter l'interpréteur ou modifier le fichier que vous exécutez actuellement à la volée. avec edit (1) . Pensez-vous que vous avez trouvé un problème avec le prédicat foobar / 2 ?

?- edit(foobar).

Et dès que vous quitterez l'éditeur, cette chose va être recompilée. Bien sûr, Eclipse fait la même chose pour Java, mais Java n’est pas vraiment un langage de prototypage.

Mis à part le pur prototypage, Prolog est incroyablement bien adapté à la traduction d'un élément de logique en code . Ainsi, les prouveurs automatiques et ce genre de choses peuvent facilement être écrits en Prolog.

Le premier interprète Erlang a été écrit dans Prolog - et cela pour une raison, car Prolog est très bien adapté à l'analyse syntaxique et au codage de la logique que vous trouvez dans les arborescences d'analyse . En fait, Prolog est livré avec un analyseur intégré! Non, pas une bibliothèque, c'est dans la syntaxe, à savoir DCG s .

Prolog est utilisé beaucoup dans la PNL, en particulier dans la syntaxe et la sémantique informatique .

Mais, Prolog est sous-utilisé et sous-estimé. Malheureusement, il semble supporter un universitaire ou "inutilisable à des fins réelles". stigmate. Mais il peut être très bien utilisé dans de nombreuses applications du monde réel impliquant des faits et le calcul de relations entre des faits. Il n’est pas très bien adapté au traitement des chiffres, mais CS n’est pas seulement une question de calcul.

Autres conseils

Since Prolog = Unification syntaxique + Chaînage arrière + REPL ,

la plupart des endroits où l'unification syntaxique est utilisée est également utile pour Prolog.

  

Utilisations de l’unification syntaxique

     
      
  • transformations AST
  •   
  • Inférence de type
  •   
  • Réécriture de termes
  •   
  • Preuve de théorème
  •   
  • Traitement du langage naturel
  •   
  • Correspondance de modèle
  •   
  • Génération de cas de test combinatoires
  •   
  • Extraire des sous-structures à partir de données structurées telles qu'un document XML
  •   
  • Calcul symbolique, c'est-à-dire calcul
  •   
  • bases de données déductives
  •   
  • Systèmes experts
  •   
  • Intelligence artificielle
  •   
  • Analyse
  •   
  • Langues de la requête
  •   

Programmation logique par contraintes (CLP)

De nombreux cas d'utilisation de la programmation logique très bons et bien adaptés ont déjà été mentionnés. J'aimerais compléter la liste existante par plusieurs tâches d'un domaine d'application extrêmement important de la programmation logique:

La programmation logique se fond parfaitement, de manière plus transparente que d’autres paradigmes, avec des contraintes , ce qui donne un cadre appelé Programmation logique avec contraintes .

Ceci conduit à des solveurs de contraintes dédiés pour différents domaines , tels que:

  • CLP (FD) pour les nombres entiers
  • CLP (B) pour les booléens
  • CLP (Q) pour les nombres rationnels
  • CLP (R) pour les nombres en virgule flottante .

Ces résolveurs de contraintes dédiés conduisent à plusieurs cas d'utilisation importants de la programmation logique qui n'ont pas encore été mentionnés, dont certains ci-dessous.

Lors du choix d’un système Prolog, la puissance et les performances de ses résolveurs de contraintes comptent souvent parmi les facteurs décisifs, en particulier pour les utilisateurs commerciaux.

CLP (FD) & # 8212; Raisonnement sur des entiers

En pratique, le CLP (FD) est l’une des applications les plus importantes de la programmation logique et est utilisé pour résoudre des tâches dans les domaines suivants, entre autres:

  
      
  • planification
  •   
  • allocation de ressources
  •   
  • planification
  •   
  • optimisation combinatoire
  •   

Voir pour plus d'informations et plusieurs exemples.

CLP (B) & # 8212; Contraintes booléennes

CLP (B) est souvent utilisé avec:

  
      
  • Résolution SAT
  •   
  • vérification du circuit
  •   
  • comptage combinatoire
  •   

Voir .

CLP (Q) & # 8212; Nombres rationnels

CLP (Q) permet de résoudre d'importantes catégories de problèmes liés à la recherche & nbsp; opérations :

.
  
      
  • programmation linéaire
  •   
  • programmation linéaire en nombres entiers
  •   
  • programmation linéaire en nombres entiers mixtes
  •   

Voir .

Prolog est idéal pour les problèmes non numériques. Cet article donne quelques exemples de certaines applications de Prolog et pourrait vous aider à comprendre le type de problèmes. qu'il pourrait résoudre.

Une des choses que Prolog vous offre gratuitement est un algorithme de recherche en sens inverse - vous pouvez le mettre en œuvre vous-même, mais si votre problème est mieux résolu en disposant de cet algorithme, il est agréable de l'utiliser.

Les deux choses que j'ai vues excellentes sont les preuves mathématiques et la compréhension du langage naturel.

Prolog est doué pour résoudre des énigmes et autres. Cela dit, dans le domaine de la résolution de casse-tête, la résolution de casse-tête facile / moyenne est plus facile et la résolution de casse-tête compliquée est plus difficile. Cependant, écrire des solveurs pour résoudre des énigmes telles que Hexiom, Sudoku ou Nurikabe n’est pas particulièrement difficile.

Une réponse simple est "Construire des systèmes". Le langage utilisé pour construire les Makefiles (au moins, la partie décrivant les dépendances) est essentiellement un langage de programmation logique, bien qu’il ne s’agisse pas vraiment d’un langage "pur". langage de programmation logique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top