0% ont trouvé ce document utile (0 vote)
114 vues2 pages

TP3 Correction

Le document présente plusieurs prédicats Prolog pour manipuler des listes, notamment pour calculer leur longueur, concaténer des listes, vérifier si une liste est un palindrome, extraire les éléments aux indices pairs, trouver l'indice d'un élément dans une liste, remplacer un élément par un autre et séparer une liste en deux selon qu'un élément est inférieur ou supérieur à une valeur donnée.

Transféré par

Nihed Jebali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
114 vues2 pages

TP3 Correction

Le document présente plusieurs prédicats Prolog pour manipuler des listes, notamment pour calculer leur longueur, concaténer des listes, vérifier si une liste est un palindrome, extraire les éléments aux indices pairs, trouver l'indice d'un élément dans une liste, remplacer un élément par un autre et séparer une liste en deux selon qu'un élément est inférieur ou supérieur à une valeur donnée.

Transféré par

Nihed Jebali
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

[FONDEMENTS DE L’IA] 2023/2024

TP3 : LES LISTES

1) Définir le prédicat longueur(L,N), qui étant donnée la liste L calcule sa longueur N.

longeur ([], 0).

longeur ([_|T], N) :- longeur (T, N1), N is N1 + 1.

2) Définir le prédicat concat(L1,L2,L3) où L3 est le résultat de la concaténation de L1 et L2

(sans utiliser append).

concat([],L,L).

concat([H|T],L,[H|Tr]) :- concat(T,L,Tr).

3) Définir le prédicat palindrome(L) qui retourne vrai si la liste L est sa propre image

renversée.

palindrome([]).

palindrome([_]).

palindrome([X|Xs]):-append(Xs1,[X],Xs), palindrome(Xs1).

4) Définir un prédicat rang_pair(X,Y) qui extrait les éléments de la liste X qui ont des

indices de rang pair afin de construire la liste Y.

Ex. rang_pair([a,b,c,d,e],L). -> L=[b,d]

rang_pair([],[]).

rang_pair([_],[]).

rang_pair([_,Y|L],[Y|L2]) :- rang_pair(L,L2).

5) Définir le prédicat indice(X,L,N), qui étant donné un élément X et une liste L, X

appartenant à L, calcule N l’indice de la première occurrence de X dans L.

Peut-on utiliser ce prédicat pour formuler une requête permettant de calculer le ième

élément d’une liste ?

ISSATM 1
[FONDEMENTS DE L’IA] 2023/2024

indice(X,[X|_],1).

indice(X,[Y|L],N) :- X\==Y, indice(X,L,Nm1), N is Nm1+1.

/* pour trouver le ieme element d'une liste :

?- indice(X,[a,b,c,d,e],3).

X = c */

6) Écrire le prédicat remplace(X1,X2,L1,L2) qui construit la liste L2 qui est la liste L1 dans

laquelle X1 est remplacé par X2.

remplace(_,_,[],[]).

remplace(X,Y,[X|L1],[Y|L2]) :- remplace(X,Y,L1,L2).

remplace(X,Y,[Z|L1],[Z|L2]) :- Z \== X, remplace(X,Y,L1,L2).

7) Définir le prédicat partage(L,X,L1,L2), qui étant donnés une liste de nombre L et un

nombre X, calcule la liste L1 des nombres de L inférieurs à X, et la liste L2 des nombres

de L supérieurs ou égaux à X.

partage([],_,[],[]).

partage([Y|L],X,[Y|L1],L2) :- Y<X, partage(L,X,L1,L2).

partage([Y|L],X,L1,[Y|L2]) :- Y>=X, partage(L,X,L1,L2).

ISSATM 2

Vous aimerez peut-être aussi