Tutoriel Prolog: On énonce un problème sous forme des règles
Un programme prolog est constitué principalement de faits et de règles. les règles sont le moyen d'exprimer ce qu'on l'on veut faire des faits qu'on a enregistré.
Par exemple, nous savons dans quelles villes habitent une liste de personnes...
habite('Julia', 'New York').
habite('Tom', 'San Francisco').
habite('Naomi', 'New York').
habite('Harrison', 'San Francisco').
Julia habite à New York, Tom à San Francisco, etc...
Une façon d'exploiter ces connaissances peut-être de trouver quelles personnes habitent dans la même ville. Pour cela on définit une règle.
voisin(X,Y) :- habite(X, Ville), habite(Y, Ville).
Cela s'énonce ainsi:
- X et Y sont voisins si
- X habite dans telle ville
- Y habite dans telle ville
- de facto la variable Ville à le même contenu dans les deux énoncés
Cela nous donnera Julia voisin de Noami, Tom voisin de Harrison. Mais cela nous donnera aussi Julia voisin de Julia, car prolog ne suppose pas de lui-même que X et Y sont deux personnes différentes. il faut donc ajouter une autre condition, c'est que les variables X et Y aient des valeurs différentes.
voisin(X,Y) :- habite(X, Ville), habite(Y, Ville), X \= Y.
Nous aurons le résultat suivant.
Julia voisin de Naomi
Tom voisin de Harrison
Naomi voisin de Julia
Harrison voisin de Tom
Pour afficher ces résultats, nous allons ajouter un petit programme. Un programme est une règle qui contient des instructions. Nous utilisons trois instructions de la bibliothèque standard:
- write: affiche une chaîne de caractère.
- forall: trouve la liste de tous les faits qui remplissent la condition en premier paramètre, et pour chaque élément de cette liste, exécute l'instruction donnée en second paramètre.
- format: une forme plus élaborée de write qui affiche un texte avec un format donné. Similaire à printf de C.
Voici donc le programme:
program :-
write('Voisins...\n'),
forall(voisin(X,Y), format("~a voisin de ~a ~n", [X, Y])),
write('Fin').
Puisque "program" est une règle, pour l'exécuter vous tapez la ligne suivante dans la console prolog:
program.
Cela affichera:
Voisins... Julia voisin de Naomi
Tom voisin de Harrison
Naomi voisin de Julia
Harrison voisin de Tom Fin
Vous pouvez également invoquer directement la règle "voisin":
voisin('Julia', 'Naomi').
qui retournera "yes".
Sachant maintenant comme énoncer des faits et des règles, vous avez tout ce qu'il faut pour résoudre des problèmes complexes grâce à Prolog...