cnam:utc503:declarative:prolog

Ceci est une ancienne révision du document !


Programation logique

Prolog (PROgrammer en LOGique, 1970, Robert A. Kowalski (Edinburgh) & Alain Colmerauer (Marseille)) est né du besoin de pouvoir traiter la langue naturelle par ordinateur et, en particulier, la grammaire.

Télécharger et installer SWI Prolog

Créer un nouveau fichier (tests.pl) qui va constituer votre base de faits.

Les faits : « Jean aime Marie » ou « Anne aime Jean » sont traduits en Prolog par :

aime(jean, marie). % car Jean aime Marie
aime (paul , marie). % Paul est amoureux de Marie
aime (marie , paul). % et Marie aime Paul
Avec

  1. le nom de la relation ou prédicat (débutant par une minuscule),
  2. le/les arguments (ici « jean » et « marie ») séparés par une virgule, dans un ordre qui possède un sens (qui est le sujet et le complément de l’action décrite),
  3. le fait se termine par un point « . ».

Les espaces ne jouent pas de rôle et le % indique le début du commentaire. (Le commentaire peut aussi être placé entre /* … */). Le nom de la relation (ici « aime ») dépend du programmeur / analyste.

Les questions permettent d'interroger la base de fait. Elles se posent dans la fenêtre d'exécution de Prolog.

Charger votre base de connaissances avec le nom du fichier entre crochets :

[tests].

En Prolog, les questions débutent par le point d’interrogation suivi du nom de la relation et du/des argument(s) (objet). On parle également de but pour désigner une question. Par exemple, on peut se poser la question de savoir si « Est-ce que Jean aime Marie ? ». Cette question se traduit par :

?- aime(jean, marie).
Pour y répondre, l’interprète Prolog va essayer d’unifier la question posée avec un des faits de sa base de connaissance. S’il réussit, il répond « Yes » et « No » dans le cas contraire.

Une variable commence par une Majuscule.

Les variables permettent d'introduire des inconnues, et sont utilisables dans les questions :

?- aime(jean, X).
X = marie
Yes

Il est possible d'obtenir les réponses suivantes, en utilisant le ; :

?- aime(jean, X).
X = marie ;
X = peche ;
No

Dans un fait, une variable représente tout (quelque chose de quelconque) :

anne aime tout s'écrira :

aime(anne, _) % _ est une variable quelconque

Soit la base de connaissances suivante :

aime(jean, peche).
aime(jean, marie).
aime(jean, paris).
aime(marie, paul).
aime(marie, paris).
aime(paul, marie).
aime(paul, biere).
aime(anne, bretagne).
roi(tintin, belgique).

Il est possible de vérifier la véracité simultannée de plusieurs faits avec un ET : , :

?- aime(jean, marie) , aime(marie, jean).
No

« Existe-t-il quelque chose que Jean et Paul aiment ? ».

?-aime(jean, X), aime(paul, X)

Les règles permettent de généraliser les faits, pour éviter d'avoir à saisir tous les faits dans la base de connaissances.

Une règle correspond à une affirmation générale sur les objets et leurs relations.

Par exemple, on sait que « Paul aime tous ceux qui aiment la bière » que l’on écrit en Prolog comme suit :

aime(paul, X) :- aime(X, biere).
Et cette règle se compose :

  • d’une tête (aime(paul, X)) ;
  • du symbole « :- » pour indiquer le « SI » ;
  • d’un corps (aime(X, biere)) ;
  • et d’un « . » final

L’ensemble des règles possédant le même nom (foncteur) et le même nombre d’arguments (arité) doivent se suivre dans votre programme (elles doivent former un paquet de clauses).

  • cnam/utc503/declarative/prolog.1701017474.txt.gz
  • Dernière modification : il y a 17 mois
  • de jcheron