Vous êtes sur la page 1sur 3

AI et machine learning 3-ISI

TP2 : LES LISTES (PROLOG)

Soit la liste suivante :

▪ Liste([1,2,3,4,5]).

▪ ?- Liste = [Head|Tail] reussit avec Head = 1 et Tail =[2,3,4,4] et Liste = .(1, Tail)
▪ [a,b,c] = [a|[b,c]] = [a,b|[c]] = [a,b,c|[]]
▪ [1,2,3,4,5] = [1|[2,3,4,5]] = [1,2|[3,4,5]] = [1,2,3,4,5|[]]

Exercice 1 : Écrivez un prédicat somme en Prolog qui calcule la somme des éléments
d'une liste d'entiers.

somme([], 0).

somme([Tête | Reste], S) :- somme(Reste, S1), S is S1 + Tête.

Exercice 2 : Écrivez un prédicat maximum en Prolog qui trouve le maximum d'une


liste d'entiers.

maximum([X], X).

maximum([Tête | Reste], Max) :- maximum(Reste, MaxReste), Max is max(Tête,


MaxReste).

Exercice 3 : Écrivez un prédicat membre en Prolog qui vérifie si un élément donné


est membre d'une liste donnée.

membre(X, [X | _]).

membre(X, [_ | Reste]) :- membre(X, Reste).

Exercice 4 : Écrivez un prédicat inverse en Prolog qui inverse une liste.

inverse([], []).

inverse([Tête | Reste], Inverse) :- inverse(Reste, InverseReste),


append(InverseReste, [Tête], Inverse).
1
AI et machine learning 3-ISI

Exercice 5 : Écrivez un prédicat pair en Prolog qui vérifie si un nombre donné est
pair.

pair(X) :- X mod 2 =:= 0.

Exercice 6 : Écrivez un prédicat factoriel en Prolog qui calcule le factoriel d'un


nombre.

factoriel(0, 1).

factoriel(N, F) :- N > 0, N1 is N - 1, factoriel(N1, F1), F is N * F1.

Exercice 7 : Écrivez un prédicat fibonacci en Prolog qui calcule le n-ième nombre


de la suite de Fibonacci.

fibonacci(0, 0).

fibonacci(1, 1).

fibonacci(N, F) :-N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),fibonacci(N2,


F2), F is F1 + F2.

Exercice 8 : Écrivez un prédicat liste-triée en Prolog qui vérifie si une liste


d'entiers est triée par ordre croissant.

liste_triee([]).

liste_triee([_]).

liste_triee([X, Y | Reste]) :- X =< Y, liste_triee([Y | Reste]).

Exercice 9 : Écrivez un prédicat doublons en Prolog qui renvoie une liste


contenant les éléments en double dans une liste donnée.

doublons([], []).

doublons([X | Reste], Doublons) :- membre(X, Reste), not(membre(X, Doublons)),

doublons(Reste, [X | Doublons]).

doublons([_ | Reste], Doublons) :-doublons(Reste, Doublons).

2
AI et machine learning 3-ISI

Exercice 10 : Écrivez un prédicat fusion en Prolog qui fusionne deux listes triées
en une seule liste triée.

fusion([], L, L).
fusion(L, [], L).
fusion([T1 | R1], [T2 | R2], [T1 | R]) :-T1 =< T2, fusion(R1, [T2 | R2], R).
fusion([T1 | R1], [T2 | R2], [T2 | R]) :-T1 > T2, fusion([T1 | R1], R2, R).

Vous aimerez peut-être aussi