Département Année universitaire
Génie Logiciel 2022/2023
Intelligence Artificielle Responsable
4ème Année Yousra Hadj Hassen
TP2 : Intelligence Artificielle
Prolog
Logiciel Nécessaire pour le TP :
L’interpréteur SWI-PROLOG (ou GNU Prolog) sous Windows ou Linux.
Objectifs du TP :
Se familiariser avec le langage de programmation PROLOG.
Utiliser et manipuler des listes et des entiers en PROLOG.
Pré-requis :
Connaissances de base en prolog.
I. Liste en PROLOG
Pareil à d’autres langages de programmation, les tableaux en PROLOG sont des listes.
Contrairement à la plupart des langages de programmation, les indices des éléments ne sont
pas disponibles.
En revanche, une liste L peut toujours être décomposée en L=[E|R] où E est le premier
élément de la liste (E n’est pas une liste) et R est le reste de la lsite (R est une liste : c’est en
fait la tranche de L qui démarre après E).
La liste vide est [ ].
N.B. En Prolog, on ne définit pas de fonction ou de procédures mais des prédicats (à valeur
dans {0,1}), éventuellement avec 0 argument. Donc, pour faire l’équivalent d’une procédure,
on dit qu’un certain prédicat est vrai à condition qu’un certain nombre d’actions soient faites,
par exemple :
affiche :- write(‘bonjour’).
1 Travaux Pratiques : Intelligence Artificielle
4ème année GL
Département Année universitaire
Génie Logiciel 2022/2023
Intelligence Artificielle Responsable
4ème Année Yousra Hadj Hassen
II. Travail demandé
Exercice1 : Manipulation de Liste
Définir les prédicats suivants :
1. liste(L) : liste est vrai si L est une liste.
2. affiche(L) : est vrai si tous les éléments de la liste L sont écrits.
3. affiche_inverse(L) : est vrai si tous les éléments de la liste L sont écrits en ordre
inverse.
4. premier1(L,X) : est vraie si X est le premier élément de la liste L.
5. premier2(L) : est vraie si le premier élément de L est affiché (et aucun autre).
6. dernier1(L,X) : est vrai si X est le dernier élément de la liste L.
7. dernier2(L) : est vraie si le dernier élément de L est affiché.
8. element(X,L) : est vrai si X est élément de la liste L.
9. nieme(N,L,X) : est vrai si X est le Nième élément de la liste L.
10. compte(L,N) : est vrai si N est le nombre d’éléments de la liste L.
11. somme(L,N) : est vrai si N est la somme des éléments de la liste des entiers L.
12. occurrence(L,X,N) : est vraie si N est le nombre de fois ou X est dans la liste L.
13. sous_ensemble(L1,L2) : est vrai si tous les éléments de la liste L1 font partie de la
liste L2.
14. substitue(X,Y,L1,L2) : est vrai si L2 est le résultat du remplacement de X par Y
dans L1.
15. retourne(L,L1) : est vrai si la liste L1 est l’inverse de la liste L.
16. concat(L1,L2,L3) : concaténation de listes (L1 + L2 = L3).
17. inserer(X, L1, L2) : X est inséré en tête de L1 pour donner L2.
18. ajouter(X,L1, L2) : X est ajout2 en fin de L1 pour donner L2.
19. selection(X, L1, L2) : X est extrait de L1 pour donner L2.
20. supprimer(X, L1, L2) : toutes les occurrences de X sont supprimées de L1 pour
donner L2.
21. inverser(L1,L2) : inverser L1 donne L2.
22. substituer(X,Y,L1,L2) : substituer toutes les occurrences de X par Y dans L1 donne
L2.
23. decaler(L,LD) : LD est la liste L ou les éléments ont été décalés circulairement vers
la droite.
24. permuter(L,LP) : LP est une permutation de la liste L (si n est le nombre
d’éléments de la liste, il y a n! permutations possibles).
25. convertir(L,LC) : LC est la liste L ( = [t1,t2,...,tn] ) écrite sous la forme t1 et t2 et ...
et tn et fin.
2 Travaux Pratiques : Intelligence Artificielle
4ème année GL
Département Année universitaire
Génie Logiciel 2022/2023
Intelligence Artificielle Responsable
4ème Année Yousra Hadj Hassen
26. aplatir(L,LA) : LA est la liste L qui ne contient plus qu’un seul niveau de crochets (
[...] ). transposer(L,LT): LT est la matrice transposée de la matrice L.
27. creerListe(X,N,L) : L est la liste créée à partir de N occurrences du terme X.
28. univ(F,L) : L est la liste dont la tête est le nom du terme F et la queue est composée
des arguments de F. Chacun des arguments peut être libre, mais pas les deux
simultanément.
Exercice2: Entiers naturels
Traduire en Prolog les axiomes définissant les nombres entiers non négatifs (∈ ℕ) et les
principales opérations les concernant.
Le vocabulaire initial de la théorie des entiers non négatifs comprend :
une constante z qui représente l’entier 0 (zéro) ;
une fonction unaire S(X) qui traduit la notion de successeur d’un entier x ; /*une
fonction unaire est une fonction qui a un seul argument, dans notre exemple c'est le
X.*/
un prédicat unaire entier(x) (x est un entier).
1. Génération:
2. Addition:
3. Multiplication:
4. Exponentiation:
5. Prédécesseur:
6. Soustraction:
7. Inférieur ou égal:
8. Strictement inférieur :
9. Quotient et reste :
10. Division:
11. Plus grand diviseur commun :
12. Factorielle :
3 Travaux Pratiques : Intelligence Artificielle
4ème année GL
Département Année universitaire
Génie Logiciel 2022/2023
Intelligence Artificielle Responsable
4ème Année Yousra Hadj Hassen
Exercice3: Traduction Prolog
1. Traduire par un fait Prolog une fiche d’état-civil du type :
Etat civil :
Personne 1 2 3
Nom Ngaoundere Martin Strauss
Prénom Richard Jean Louise
Date de naissance 01/05/1988 18/10/1990 01/01/1982
Nationalité camerounais française allemande
Sexe masculin masculin féminin
Adresse :
Rue 4 rue 35 bd 6 Mario
Leclerc Invalides Rossi
Ville Brest Paris Rome
Région Finistère Ile-de- Lazio
(29) france
2. On suppose que la base de faits contient un certain nombre de fiches d’état-civil.
Traduire par des buts Prolog les questions suivantes :
(a) Quels sont les individus (nom,prénom) de nationalité française ?
(b) Quels sont les individus (nom,prénom,nationalité) de nationalité étrangère (qui
ne sont pas des français) ?
(c) Quels sont les individus (nom,prénom,nationalité) de nationalité étrangère
habitant Brest dans le Finistère ?
(d) Y a-t-il des individus habitant la même adresse ?
4 Travaux Pratiques : Intelligence Artificielle
4ème année GL
Département Année universitaire
Génie Logiciel 2022/2023
Intelligence Artificielle Responsable
4ème Année Yousra Hadj Hassen
Exercice4: Arbre binaire
Arbres binaires : structure soit vide, soit composée de trois éléments :
une racine Val,
un sous–arbre binaire Gauche,
un sous–arbre binaire Droite.
Un arbre binaire vide sera représenté ici par le terme atomique [], un arbre non vide par le
terme composé bt(Gauche,Val,Droite) (bt comme binary tree).
Exemple : bt(bt(bt([],3,[]),5,bt([],7,[])),9,bt([],12,[]))
Définir les prédicats suivants concernant les arbres binaires :
1. arbreBinaire(T) % T est un arbre binaire
2. dansArbre(X,A) % X est un élément de l’arbre binaire A
3. profondeur(A,N) % N est la profondeur de l’arbre binaire A
5 Travaux Pratiques : Intelligence Artificielle
4ème année GL