TP1 : Corrigé-type
Transcription
TP1 : Corrigé-type
Université Abou Bakr-Belkaïd – Tlemcen Faculté des Sciences Département d’Informatique Année universitaire 2015-2016 3ème année Licence Informatique Programmation logique – Prolog TP1 : Corrigé-type Exercice n° 01 : 1. bonjour(X) :- write("Bonjour "), write(X). 2. 3. 4. 5. monsieur(ilies). monsieur(amine). demoiselle(amina). demoiselle(sara). dame(nadia). dame(ahlem). bonjour(X) :- monsieur(X), write("Bonjour Monsieur "), write(X). bonjour(X) :- demoiselle(X), write("Bonjour Melle "), write(X). bonjour(X) :- dame(X), write("Bonjour Madame "), write(X). mari(ilies, nadia). mari(amine, ahlem). bonjour(X) :- monsieur(X), mari(X, Y), write("Bonjour Monsieur "), write(X) , write(" comment va votre épouse "), write(Y), write(" ? "). bonjour(X) :- dame(X), mari(Y, X), write("Bonjour Madame "), write(X) , write(" comment va votre époux "), write(Y), write(" ? "). bonjour(X) :- demoiselle(X), write("Bonjour Melle "), write(X). 6. ?- mari(X, Y). mais cette requête affiche tous les couples X et Y. On aura : X=ilies, Y=nadia, et X=amine, Y=ahlem. Donc la requête n’affiche pas uniquement les messieurs mariés, mais plutôt leurs femmes aussi. 7. Le caractère « _ » représente une variable qui est utilisée uniquement pour vérifier certaines conditions mais dont la valeur ne sera pas affichée par l’interpréteur. D’où, ?- mari(X, _). affichera uniquement les messieurs mariés et ignora l’affichage de leurs femmes. Exercice n° 02 : 1. L’ensemble des faits : enseignant(omar). enseignant(abdelkrim). enseignant(zakaria). assure(omar, java). assure(abdelkrim, c). assure(zakaria, python). Programmation logique – Prolog étudiant(yassine). étudiant(mohamed). étudiant(malik). étudiant(nabil). étudiant(fatima). étudiant(ibtissem). étudiant(hamza). 2015/2016 inscrit(nabil,python). inscrit(nabil,c). inscrit(ibtissem,c). inscrit(malik,c). inscrit(mohamed,java). inscrit(malik,java). inscrit(yassine,java). inscrit(fatima,python). inscrit(hamza,python). hmahfoud.wordpress.com 2. Les requêtes : a) Tous les enseignants : ?- enseignant (X). b) Toutes les formations : ?- assure(_,X). c) Toute personne de l’école : ?- enseignant(X) ; étudiant(Y). d) Tous les étudiants qui sont inscrits à deux formations différentes. ?- (inscrit(X, java), inscrit(X, c)) ; (inscrit(X, java), inscrit(X, python)) ; (inscrit(X, c), inscrit(X, java)). 3. La règle étudiant_existe(X) : étudiant_existe(X) :- étudiant(X), write("L'étudiant "), write(X), write(" est bien inscrit à l'école."). 4. La règle il_suit(X) : il_suit(X) :- inscrit(X, Y), write("L'étudiant "), write(X), write(" est bien inscrit à la formation "), write(Y). 5. La règle il_suit(X) (2ème version): il_suit(X) :- inscrit(X, Y), assure(Z, Y), write("L'étudiant "), write(X), write(" est bien inscrit à la formation "), write(Y), write(" assurée par l'enseignant "), write(Z). 6. La règle tous_ceux_inscrits(F) : tous_ceux_inscrits(F) :- inscrit(X, F), write(X), write(" "). 7. ?- findall( _ , tous_ceux_inscrits(F), _ ). 8. La règle seront_présents(E, F): seront_présents(E,F) :- assure(E,F), write("L'enseignant "), write(E), write(" donnera un cours de "), write(F), write(" pour les étudiants :"), findall(_, tous_ceux_inscrits(F), _). 9. seront_présents :- write("Entrer le nome de l'enseignant : "), read(X), nl, write("Entrer le nome de la formation : "), read(F), nl, assure(E,F), write("L'enseignant "), write(E), write(" donnera un cours de "), write(F), write(" pour les étudiants :"), findall(_, tous_ceux_inscrits(F), _). Programmation logique – Prolog 2015/2016 hmahfoud.wordpress.com