Académique Documents
Professionnel Documents
Culture Documents
Prolog Examen 2005 2006
Prolog Examen 2005 2006
Langages de Programmation II
pred1([],_).
pred1([X|L],[X|L1]) :- pred1(L,L1).
pred2([_],[]) :- fail.
pred2([X|L],[X|M]) :- pred1(L,M).
pred2([X|L],[_|M]) :- pred2([X|L],M).
1
2
4 9
5 6 30 15
1 7 7 2
nb_parents(eve,0) :- !.
nb_parents(adam,0) :- !.
nb_parents(_,2).
1. Quel type de coupure est utilisé ici : rouge ou verte? Réponse à justifier!
2. Le prédicat nb_parents peut-il est utilisé correctement en mode (+,+)?
En mode (+,-)? Réponses à justifier aussi!
3. Proposer une modification du programme pour qu’il fonctionne correcte-
ment en mode (+,+) et (+,-).
2
4 Éléments de correction
Exercice 1 : Prédicat mystère
Question 2.1 :
est_arbre(X) :- integer(X).
est_arbre([X,G,D]) :- integer(X),est_arbre(G),est_arbre(D).
Question 2.2 :
feuilles(X,[X]) :- integer(X).
feuilles([_,G,D],L) :- feuilles(G,L1),feuilles(D,L2),append(L1,L2,L).
Question 2.3 :
sous_arbre(S,S).
sous_arbre(X,[_,G,_]) :- sous_arbre(X,G).
sous_arbre(X,[_,_,D]) :- sous_arbre(X,D).
Question 3.1 : la coupure est rouge car si on enlève une des deux coupures,
le résultat n’est plus le même (par exemple nb_parents(eve,X) renverra YES
X=0 ou X=2 alors qu’avec les coupures, ce but renverra uniquement YES X=0).