tp 10 - prolog - L`Université Paris Descartes
Transcription
tp 10 - prolog - L`Université Paris Descartes
TP 10 - PROLOG http://web.mi.parisdescartes.fr/~bonzon/Cours/prolog.htm Introduction Choisissez votre éditeur préféré pour créer un fichier tp10_nom_prenom.pl, que vous enverrez par mail avant la fin du TP à [email protected]. Pensez à commenter et à indenter correctement votre code. Enoncé On considère cinq maisons, toutes de couleur différente (rouge, bleue, jaune, blanche et verte), dans lesquelles logent cinq personnes de nationalités différentes (anglaise, suedoise, danoise, norvegienne, allemande) ayant chacun une boisson favorite (thé, café, lait, bière et eau), un animal de compagnie (chien, chat, oiseau, cheval et poisson), et un sport favori (football, baseball, volley, hockey, tennis). On dispose des faits suivants : 9. Le Norvégien habite dans la première maison. 1. L’Anglais vit dans la maison rouge 10. L’homme qui pratique le volley vit à côté de celui qui a des chats. 2. Le Suédois a des chiens 3. Le Danois boit du thé 4. La maison verte est directement à gauche de la maison blanche. 5. Le propriétaire de la maison verte boit du café. 6. La personne qui joue au football élève des oiseaux. 7. Le propriétaire de la maison jaune joue au baseball. 8. Celui qui vit dans la maison du centre boit du lait. 11. L’homme qui a un cheval est le voisin de celui qui pratique le baseball. 12. Celui qui pratique le tennis boit de la bière. 13. L’Allemand joue au hockey. 14. Le Norvégien vit juste à côté de la maison bleue. 15. L’homme qui joue au volley a un voisin qui boit de l’eau. Il s’agit de trouver qui a un poisson rouge. On suppose que les maisons sont numérotées de 1 à 5 de gauche à droite. On gère une liste C de 5 couleurs, une liste N de 5 nationalités, une liste B de 5 boissons, une liste A de 5 animaux et une liste S de 5 sports (il ne faut pas les définir, Prolog les construira pour trouver la solution). Par exemple si les listes sont : C = [jaune, bleu, rouge, vert, blanc], N = [norvegien, danois, anglais, allemand, suedois], B = [eau, the, lait, cafe, biere], A = [chat, cheval, oiseau, poisson, chien], S = [baseball, volley, football, hockey, tennis] cela signifie que le danois habite dans la maison bleue, qu’il boit du thé, qu’il a un cheval et qu’il joue au volley, car bleu, danois, thé, cheval et volley occupent la même position dans les listes. 1 1. Définir 5 prédicats lc, ln, lb, la et ls permettant de poser les contraintes inhérentes aux listes C, N, B, A et S. Par exemple, la liste C est constituée de 5 couleurs, qui sont toutes différentes les unes des autres. 2. Définir le prédicat meme_maison(X, L1, Y, L2), qui est vrai si X et Y sont dans la même position dans les listes L1 et L2. Par exemple pour le fait 1, on pourra dire que “anglais” est à la même place dans la liste N (liste des nationalités) que “rouge” dans la liste C (liste des couleurs). 3. Définir le prédicat maison_a_cote(X, L1, Y, L2), qui est vrai si X et Y sont dans des positions voisines dans les listes L1 et L2. 4. Définir le prédicat maison_a_gauche(X, Y, L), qui est vrai si X est juste à gauche de Y dans la liste L. 5. Définir le prédicat poisson(C, N, B, A, S, Poisson) qui calcule les listes C, N, B, A et S, et qui trouve dans la variable Poisson la nationalité du propriétaire du poisson en fonction des faits donnés au début du TP. Voici ce que doit vous retourner l’intérpréteur Prolog : ?- poisson(C, N, B, A, S, Poisson). C = [jaune, bleu, rouge, vert, blanc], N = [norvegien, danois, anglais, allemand, suedois], B = [eau, the, lait, cafe, biere], A = [chat, cheval, oiseau, poisson, chien], S = [baseball, volley, football, hockey, tennis], Poisson = allemand ; false. 2