Vous êtes sur la page 1sur 4

Intelligence Artificielle

2020-2021

TP1 : Installation et utilisation de Prolog

1. Installation de Swi-Prolog

2. Utilisation de Swi-Prolog
Pour créer une base de faits et de règles, on crée un fichier avec l’extension .pl dont on
demande le chargement par l’interprète.

L’opération de chargement par l’interprète est appelée consultation d’un fichier telle
qu’illustré dans la figure suivante.
Exemple : créer un nouveau fichier dans lequel vous écrirez votre programme (par exemple
exemple1.pl). Attention à utiliser une lettre en minuscule pour la première lettre du nom du
fichier :

animal (chien).
animal (chat).
prenom (ali).
prenom (ahmed).
prenom (amine).

Voici les faits affirmés par notre programme :

• chien et chat sont des animaux


• ali, ahmed et amine sont des prénoms

Ouvrons le programme source exemple1.pl dans l'interpréteur Prolog : consult(exemple1).

➢ En Prolog, les questions débutent par le point d’interrogation suivi du nom du


prédicat et du/des argument(s) : ?- prenom (najima).

A chaque question posée à l'interpréteur Prolog, ce dernier consultera les faits et les règles
inscrits dans le programme.
Soit la variable X. Elle va prendre pour valeur chaque nom d'animal. Pour passer d'une valeur
à une autre il faut appuyer sur la touche point-virgule. Une fois que la liste est terminée,
Prolog la fini par un point. Elle peut servir de même pour afficher les prénoms.

➢ Autre question : existe-t-il des animaux ?

?- animal(_).

Cette fois l'expression animal(_) sera vraie chaque fois que Prolog rencontre un animal
(peu importe lequel) dans la base des faits du programme. Comme Prolog rencontre 3
animaux, la réponse à notre question est :

➢ La commande listing . : permet d’afficher le code source de la base de faits du


programme courant.
➢ La commande « halt. » : permet de sortir de l'interpréteur Prolog.

3. Exercices d’application

Exercice 1 : récursivité
N.B : En prolog, les boucles sont exprimées à l’aide de la récursivité.

Exemple factorielle :
fact(0,1).
fact(N,X) :- N>0, N1 is N-1, fact(N1,X1), X is N*X1.

1. Que retourne fact(6,X) ?


2. Définir un prédicat qui permet de vérifier si un nombre est pair? Impair ?
3. Définir un prédicat somme (N, S) qui calcule la somme de 1 jusqu’à un nombre N
donné par l’utilisateur.
4. Définir un prédicat hello_esi(N) qui affiche N fois le message « Hello ESI ».

Exercice 2 : arbre généalogique


Considérons l’arbre généalogique de cette famille :

Latifa Ali Hafid Zahra

Amine Rokia Ahmed Nabila

Naima Taha Walid Sanae Meryem

Malika Youssef

Question 1 : décrire les faits relatifs à cette famille en utilisant les prédicats : homme,
femme et enfant. L’arité du prédicat enfant est égale à 2 alors que celle des prédicats
homme et femme est égale à 1.

Question 2 : définir les règles suivantes sur cette famille :

parent, fils, fille, père, mère, grand_parent, petit_enfant, grand_père, grand_mère,


petit_fils, petite_fille, frere_ou_soeur, frere, soeur, oncle_ou_tante, oncle, tante,
cousin_ou_cousine, cousin, cousine.

Vous aimerez peut-être aussi