Page 1 sur 2
Université Grenoble Alpes
U.F.R. Sciences de l’Homme et de la Société Licence MIASHS 2ème année
TD Programmation en Logique n°4
Exercice 1
Soit une matrice représentée par une liste de liste. Ainsi, la matrice
ci-contre est représentée par la liste [[1,0,4,2],[3,2,1,1],[0,1,0,6],[2,7,4,3]].
Ecrire le prédicat somme/2 qui fait la somme des éléments d'une matrice.
?- somme([[1,0,4,2],[3,2,1,1],[0,1,0,6],[2,7,4,3]],R).
R=37
Exercice 2
Ecrire le prédicat palindrome/1 qui détermine si un mot est un palindrome.
?- palindrome(ressasser).
true
Ecrire une seconde version du prédicat palindrome, qui reconnaisse les phrases palindromes :
?- palindrome2('engage le jeu que je le gagne').
true
Exercice 3
Ecrire le prédicat Prolog nb/3 qui détermine le nombre d'éléments d'une liste qui appartiennent à une seconde liste.
?- nb([tulipe,rose,bleuet],[rose,oeillet,muguet,pivoine,tulipe,jonquille],R).
R=2
Exercice 4 : Arbres binaires
a) Ecrire un prédicat maxi/2 qui recherche la plus grande valeur d’un arbre binaire d’entiers.
maxi(A,M) unifie M avec la valeur maximale de l’arbre A.
b) Ecrire le prédicat profondeur/2 qui détermine la profondeur d’un arbre binaire donné.
c) Ecrire le prédicat maxi2/2, qui recherche la plus grande valeur dans un arbre binaire de recherche, c’est-à-dire un arbre dont les nœuds vérifient les propriétés suivantes :
• Tout nœud situé un sous-arbre gauche est plus petit que la racine
• Tout nœud situé un sous-arbre droit est plus grand que la racine
3 4 7 2
6 0 1 0
1 1 2 3
2 1 0 4
3 4 7 2
6 0 1 0
1 1 2 3
2 1 0 4
Page 2 sur 2
Exercice 5 :
On dispose de faits représentant des caractéristiques d'animaux ou de classes d'animaux. Le premier argument est un animal ou une classe d'animaux. Le second est une liste de caractéristiques. Ces caractéristiques peuvent inclure des classes d'animaux définis ailleurs. Par exemple, le 5e fait définit un carnivore comme un mammifère mangeant de la viande et carnivore est lui-même utilisé dans le 8e fait.
caracteristique(mammifère,[aDesPoils]).
caracteristique(mammifère,[donneDuLait]).
caracteristique(oiseau,[aDesPlumes]).
caracteristique(oiseau,[vole,pondDesOeufs]).
caracteristique(carnivore,[mammifère,mangeViande]).
caracteristique(carnivore,[dentsPointues,griffes]).
caracteristique(ongulidés,[mammifère,possèdeSabots]).
caracteristique(guépard,[carnivore,tâchesNoires,couleurFauve]).
caracteristique(zèbre,[ongulidés,striesNoires]).
caracteristique(canari,[oiseau,jaune]).
Ecrire le prédicat déduire/2 qui détermine la liste de tous les animaux ou classes d'animaux correspondant à une liste de caractéristiques donnée. Par exemple:
?- deduire([possèdeSabots,habiteSavane,donneDuLait,striesNoires],R).
R = [mammifère,ongulidés,zèbre]
Attention, il faut que toutes les caractéristiques soient vérifiées pour qu'une déduction puisse être réalisée ; ainsi, on ne peut pas utiliser le 5e fait dans l'exemple précédent parce que mangeViande n'est pas connu.