Université Abderrahmane Mira de Bejaia Faculté des Sciences Exactes Département d’informatique Année universitaire : 2022/2023 1 ère Année Master SIA (S1) Module : Intelligence artificielle Corrigé-Type TP2 : Syntaxe du prolog Activité 1 : Programmer les connaissances suivantes : Le père de ali est mohamed Le père de said est mohamed Si X et Y ont le même père ou la même mère alors ils sont des frères ou des sœurs La mère de souad est ferooudja La mère de Wissam est ferroudja Solution Type : %Le père de ali est mohamed pere(mohamed,ali). %Le père de said est mohamed pere(mohamed,said). % Si X et Y ont le même père ou la même mère alors ils sont des frères ou des soeurs frereSoeur(X,Y):- (pere(Z,X), pere(Z,Y)); (mere(Z,X), mere(Z,Y)). % La mère de souad est ferroudja mere(ferroudja,souad) % La mère de Wissam est ferroudja mere(ferroudja,wissam). Ecrire un programme qui déduit tous les frères et sœurs de cette famille. ?- frereSoeur(X,Y). Activité 2 Soit le programme Prolog suivant : homme(ali). homme(omar). homme(said). femme(celine). femme(lila). pere(ali,said). pere(ali,omar). mere(celine,omar). mere(celine,said). parents(M,P,X):-mere(M,X), pere(P,X). frere(X,Y) :- homme(X), parents(M,P,X), parents(M,P,Y). Exécuter le but : ?-frere(omar,said). et donner tous les résultats possibles. Solution Type : La requête ?-frere(omar,said). signifie : est-ce que le frère de omar est said. On aura un seul résultat possible qui est : true Activité 3 Etant donnés deux entiers N1 et N2. Ecrire un programme Prolog qui calcule le quotient entier Q et le reste de la division de n1 par n2. Solution proposée: div(X,Y,D) :- D is X/Y. mod(X,Y,M) :- M is X mod Y. Activité 4 Quelles sont les réponses de Prolog aux buts suivants. ?-2=1+1. false. ?-X=2, X=1+1. false. ?- X is 3+4. 7. ?-X=5, X is 3+3. false. ?-P(X,X)=P(a,b). erreur. ?-P(X,X)=Q(a,b). erreur A faire sur machine et voir les résultats Activité 5: Ecrire un programme Prolog qui affiche les nombres de 1 à N. Solution proposée: *ORDRE DECROISSANT* ecrit(0). ecrit(N) :- N>0 , write(N) , nl , N1 is N-1 ,ecrit(N1). *ORDRE CROISSANT* ecrit(0). ecrit(N) :- N>0 , N1 is N-1 , ecrit(N1), write(N1), nl. Activité 6 % sump : somme des éléments positifs sump([], 0). sump([T|Q], Sommep):- T<0,sump(Q, Sommep). sump([T|Q], Sommep):-T>0,sump(Q, S),Sommep is T + S. % sumn : somme des éléments négatifs sumn([], 0). sumn([T|Q], Sommen):- T>0,sumn(Q, Sommen). sumn([T|Q], Sommen):-T<0,sumn(Q, S),Sommen is T + S. % Il est également possible d’utiliser un seul prédicat sumPN d’arité % 3 permettant de calculer la somme des % éléments positifs et celle % des éléments négatifs en même temps, comme suit : sumPN([],0,0). sumPN([T|Q],SommeP,SommeN):-T>0,SommeP is T+S, sumPN(Q,S,SommeN). sumPN([T|Q],SommeP,SommeN):-T<0,SommeN is T+S, sumPN(Q,SommeP,S).