Le langage Prolog


précédentsommairesuivant

3. Fonctionnement d'un programme Prolog

Dans cette section, nous allons décrire les mécanismes qui régissent l'exécution d'un programme Prolog.

Absence de structures itératives

En Prolog, il n'y a pas de structures itératives telles que for, while, do ... while, qui sont propres aux langages impératifs.

Par conséquent, en Prolog, toutes les fonctionnalités sont programmées de manière récursive. Ainsi, pour parcourir une liste, on examine le premier élément de la liste, puis on effectue le traitement approprié sur cet élément avant d'appeler récusivement le prédicat sur le reste de la liste. C'est de cette façon que l'on construit la liste résultat.

Si vous êtes habitué à des langages impératifs tels que C, C++, Java, Delphi ou autres, ceci est assez déroutant au début et nécessite un petit temps d'adaptation. En tout état de cause, n'essayez pas de traduire de manière littérale un programme écrit dans un langage impératif, cela est extrêmement maladroit étant donné que la logique de programmation en Prolog est radicalement différente.

Execution d'un prédicat Prolog

Voici comment Prolog exécute un prédicat :

Prolog examine la première clause et évalue les buts qu'elle contient:

Prolog évalue le premier but. Ce but est susceptible de retourner :

  1. 1 solution
  2. plusieurs solutions
  3. aucune solution

Lorsqu'un but est susceptible de retourner plusieurs solutions, on dit qu'il y a un point de choix. Le plus souvent en Prolog, on a plusieurs points de choix qui constituent ce qu'on appelle un arbre décisionnel.

Lorsqu'un but est retourne au moins une solution, Prolog garde la première solution avant d'évaluer les buts suivants. Lorsqu'un but échoue (pas de solution), Prolog effectue un « retour arrière » (ou backtracking) sur le but précédent (et évalue la solution suivante, si elle existe). S'il n'y a pas de but précédent, la clause échoue.

Il arrive que Prolog rencontre l'instruction !, connue sous le nom de « cut » ou « coupe-choix ». Ce symbole signifie qu'aucun retour arrière ne sera effectué sur les buts précédant le coupe-choix. Si les buts précédents retournaient plusieurs solutions, seule la solution courante sera conservée.

Lorsque Prolog réussit à examiner tous les buts contenus dans le corps d'une clause, alors le prédicat retourne une solution.

Lorsque Prolog a fini d'évaluer une clause (qu'elle réussisse ou qu'elle échoue), Prolog examine la clause suivante, à la recherche d'autres solutions.

Ainsi :

On considère qu'il existe un OU inclusif entre les clauses d'un prédicat Prolog (disjonction)

On considère qu'il existe un ET entre les buts d'une clause. Ce "ET" est symbolisé par l'opérateur de conjonction ',' qui sépare les différents buts.




Motifs de programmation en Prolog

De manière à faciliter l'apprentissage de Prolog et à acquérir rapidement certaines techniques de programmation, j'ai écrit un article sur les motifs de programmation en Prolog : http://pcaboche.developpez.com/article/prolog/programmation_prolog/

Cet article s'adresse aussi bien aux débutants qu'aux personnes plus expérimentées.

Vous y découvrirez entre autres les techniques de bases pour concevoir et écrire des prédicats Prolog aux moyens de motifs simples à mémoriser.




Bravo, vous avez maintenant compris le fonctionnement d'un programme Prolog !




Dans la section suivante, nous allons voir certaines erreurs à éviter ainsi que certains aspects de la programmation Prolog.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2006 pcaboche. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.