% Auteur: Coralie Vessières, Yann Guyennet et Mickaël Barroux % Projet d'IA41 - Automne 2008 % Date: 2008-11-23 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Listes regroupant les caractéristiques les plus pertinentes pour une recherche optimisée du schmilblick % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Liste des familles d'animaux de la base famille(['est un mammifère','est un oiseau','est un poisson','est un insecte','est un reptile']). % Liste des régimes alimentaires des animaux de la base regime(['est omnivore','est carnivore','est herbivore']). % Tailles possibles pour les animaux de la base taille(['est plus grand que l''homme','est de la même taille que l''homme','est plus petit que l''homme']). % Sexe de la personne sexe(['est un homme','est une femme']). % Liste des catégories de personnes categorie(['est un acteur','est un chanteur','est un politique','est un sportif']). % Couleur de peau peau(['est noir','est blanc']). % Lieu où on trouve l'objet lieu(['se trouve dehors','se trouve dedans','se trouve sur soi']). % Poids de l'objet poids(['pèse moins de 1kg','pèse entre 1 et 10kg','pèse plus de 10kg']). % Matière la plus probable de l'objet matiere(['est en verre','est en bois','est en plastique','est en tissu','est en fer']). %%%%%%%%%%%%%%%%%%%%%%%%% % Base de connaissances % %%%%%%%%%%%%%%%%%%%%%%%%% % Liste des objets de la base de connaissances schmilblick('une cuillère',[ 'un objet', 'se trouve dedans', 'pèse moins de 1kg', 'est en fer', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est peu cher', 's''utilise avec autre chose']). schmilblick('une peluche',[ 'un objet', 'se trouve dedans', 'pèse moins de 1kg', 'est en tissu', 'est doux', 'est utilisé par les enfants', 'est utilisé occasionnelement', 'est moyennement cher', 's''utilise tout seul']). schmilblick('un poteau',[ 'un objet', 'se trouve dehors', 'pèse plus de 10kg', 'est en fer', 'est lisse', 's''utilise avec autre chose']). schmilblick('une boite aux lettres',[ 'un objet', 'se trouve dehors', 'pèse entre 1 et 10kg', 'est en fer', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est moyennement cher', 's''utilise avec autre chose']). schmilblick('une écharpe',[ 'un objet', 'se trouve sur soi', 'pèse moins de 1kg', 'est en tissu', 'est doux', 'est utilisé par tout le monde', 'est utilisé occasionnelement', 'est moyennement cher', 's''utilise tout seul']). schmilblick('une table',[ 'un objet', 'se trouve dedans', 'pèse entre 1 et 10kg', 'est en bois', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est cher', 's''utilise avec autre chose']). schmilblick('une voiture',[ 'un objet', 'se trouve dehors', 'pèse plus de 10kg', 'est en fer', 'est lisse', 'est utilisé par les adultes', 'est utilisé souvent', 'est cher', 's''utilise tout seul']). schmilblick('une télévision',[ 'un objet', 'se trouve dedans', 'pèse entre 1 et 10kg', 'est en plastique', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est cher', 's''utilise tout seul']). schmilblick('une bouteille d''eau',[ 'un objet', 'se trouve dedans', 'pèse moins de 1kg', 'est en plastique', 'est ondulée', 'est utilisé par tout le monde', 'est utilisé souvent', 'est cher', 's''utilise tout seul']). schmilblick('un dentier',[ 'un objet', 'se trouve sur soi', 'pèse moins de 1kg', 'est en plastique', 'est ondulée', 'est utilisé par les adultes', 'est utilisé souvent', 'est cher', 's''utilise tout seul']). schmilblick('une fontaine',[ 'un objet', 'se trouve dehors', 'pèse plus de 10kg', 'est en pierre', 'est ondulée', 'est cher']). schmilblick('une piscine',[ 'un objet', 'se trouve dehors', 'pèse moins de 1kg', 'est en plastique', 'est lisse', 'est utilisé par tout le monde', 'est utilisé occasionnelement', 'est cher', 's''utilise tout seul']). schmilblick('une clef',[ 'un objet', 'se trouve sur soi', 'pèse moins de 1kg', 'est en fer', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est peu cher', 's''utilise avec autre chose']). schmilblick('un téléphone portable',[ 'un objet', 'se trouve sur soi', 'pèse moins de 1kg', 'est en plastique', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est cher', 's''utilise tout seul']). schmilblick('un clavier',[ 'un objet', 'se trouve dedans', 'pèse moins de 1kg', 'est en plastique', 'est ondulée', 'est utilisé par tout le monde', 'est utilisé occasionnelement', 'est moyennement cher', 's''utilise avec autre chose']). schmilblick('un verre',[ 'un objet', 'se trouve dedans', 'pèse moins de 1kg', 'est en verre', 'est lisse', 'est utilisé par tout le monde', 'est utilisé souvent', 'est peu cher', 's''utilise pour autre chose']). schmilblick('un chouchou',[ 'un objet', 'se trouve sur soi', 'pèse moins de 1kg', 'est en tissu', 'est doux', 'est utilisé par tout le monde', 'est utilisé occasionnelement', 'est peu cher', 's''utilise avec autre chose']). % liste des animaux de la base de connaissances schmilblick('un cochon',[ 'un animal', 'est un mammifère', 'est omnivore', 'est de la même taille que l''homme', 'a une queue', 'a des sabots', 'se mange régulièrement']). schmilblick('un cheval',[ 'un animal', 'est un mammifère', 'est herbivore', 'est plus grand que l''homme', 'a une queue', 'a des sabots', 'se mange régulièrement']). schmilblick('un éléphant',[ 'un animal', 'est un mammifère', 'est herbivore', 'est plus grand que l''homme', 'a une queue', 'est sauvage', 'a des sabots', 'a des cornes', 'est dangeureux']). schmilblick('un tigre',[ 'un animal', 'est un mammifère', 'est carnivore', 'est plus grand que l''homme', 'a une queue', 'est sauvage', 'a des griffes', 'est dangeureux', 'est tacheté']). schmilblick('une belette',[ 'un animal', 'est un mammifère', 'est carnivore', 'est plus petit que l''homme', 'a une queue', 'est sauvage', 'a des griffes', 'vit dans un terrier']). schmilblick('un lapin',[ 'un animal', 'est un mammifère', 'est herbivore', 'est plus petit que l''homme', 'a une queue', 'a été domestiqué', 'vit dans un terrier', 'se mange régulièrement']). schmilblick('une hirondelle',[ 'un animal', 'est un oiseau', 'est carnivore', 'est plus petit que l''homme', 'a une queue', 'vole', 'est migrateur', 'vit dans un nid']). schmilblick('une cigogne',[ 'un animal', 'est un oiseau', 'est carnivore', 'est de la même taille que l''homme', 'a une queue', 'vole', 'est migrateur', 'a de longues pattes', 'a un long bec', 'vit dans un nid']). schmilblick('un perroquet',[ 'un animal', 'est un oiseau', 'est herbivore', 'est plus petit que l''homme', 'a une queue', 'vole', 'a été domestiqué']). schmilblick('un requin',[ 'un animal', 'est un poisson', 'est carnivore', 'est plus grand que l''homme', 'a une queue', 'est sauvage', 'est dangeureux']). schmilblick('un poisson rouge',[ 'un animal', 'est un poisson', 'est omnivore', 'est plus petit que l''homme', 'a une queue', 'a été domestiqué']). schmilblick('une sardine',[ 'un animal', 'est un poisson', 'est omnivore', 'est plus petit que l''homme', 'a une queue', 'est sauvage', 'se mange régulièrement']). schmilblick('une fourmi',[ 'un animal', 'est un insecte', 'est omnivore', 'est plus petit que l''homme', 'est sauvage', 'vit dans un terrier']). schmilblick('une guêpe',[ 'un animal', 'est un insecte', 'est omnivore', 'est plus petit que l''homme', 'est sauvage', 'vit dans un nid', 'est dangeureux']). schmilblick('une coccinelle',[ 'un animal', 'est un insecte', 'est omnivore', 'est plus petit que l''homme', 'est sauvage', 'vole', 'est migrateur', 'est tacheté']). schmilblick('un serpent',[ 'un animal', 'est un reptile', 'est carnivore', 'est de la même taille que l''homme', 'est sauvage', 'vit dans un terrier', 'rampe', 'est dangeureux']). schmilblick('un crocodile',[ 'un animal', 'est un reptile', 'est carnivore', 'est de la même taille que l''homme', 'est sauvage', 'vit dans un terrier', 'est dangeureux']). schmilblick('une tortue',[ 'un animal', 'est un reptile', 'est herbivore', 'est plus petit que l''homme', 'a été domestiqué', 'vit dans un terrier', 'a une carapace', 'a des griffes']). % Liste des personnes de la base schmilblick('Nicolas Sarkozy',[ 'une personne', 'est un homme', 'est blanc', 'est un politique', 'est Français', 'a été élu président en 2007', 'est marié à Carla Bruni', 'a plus de 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Barack Obama',[ 'une personne', 'est un homme', 'est noir', 'est un politique', 'est Américain', 'a été élu président en 2008', 'a entre 30 et 50 ans', 'est connu depuis moins de 5 ans']). schmilblick('Hu Jintao',[ 'une personne', 'est un homme', 'est blanc', 'est un politique', 'est Chinois', 'a été réélu président en 2008', 'a plus de 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Will Smith',[ 'une personne', 'est un homme', 'est noir', 'est un acteur', 'est Américain', 'a joué dans "A la recherche du bonheur"', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Daniel Craig',[ 'une personne', 'est un homme', 'est blanc', 'est un acteur', 'est Anglais', 'a joué dans "Quantum of Solace"', 'a entre 30 et 50 ans', 'est connu depuis moins de 5 ans']). schmilblick('Christiano Ronaldo',[ 'une personne', 'est un homme', 'est blanc', 'est un sportif', 'est Portugais', 'a remporté le ballon d''or 2008', 'a entre 15 et 30 ans', 'est connu depuis moins de 5 ans']). schmilblick('Sebastien Loeb',[ 'une personne', 'est un homme', 'est blanc', 'est un sportif', 'est Français', 'est champion du monde des rallyes 2008', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Novak Djokovic',[ 'une personne', 'est un homme', 'est blanc', 'est un sportif', 'est Serbe', 'a gagné Masters Cup masculin 2008', 'a entre 15 et 30 ans', 'est connu depuis moins de 5 ans']). schmilblick('Christophe Maé',[ 'une personne', 'est un homme', 'est blanc', 'est un chanteur', 'est Français', 'a sorti l''album "Comme à la maison"', 'a entre 30 et 50 ans', 'est connu depuis moins de 5 ans']). schmilblick('Chris Brown',[ 'une personne', 'est un homme', 'est noir', 'est un chanteur', 'est Américain', 'a sorti l''album "Exclusive"', 'a entre 15 et 30 ans', 'est connu depuis moins de 5 ans']). schmilblick('Angela Merkel',[ 'une personne', 'est une femme', 'est blanc', 'est un politique', 'est Allemand', 'a été élu chancelière en 2005', 'a plus de 50 ans', 'est connu depuis moins de 5 ans']). schmilblick('Cristina Kirchner',[ 'une personne', 'est une femme', 'est blanc', 'est un politique', 'est Argentin', 'a été élu présidente en 2007', 'a plus de 50 ans', 'est connu depuis moins de 5 ans']). schmilblick('Marion Cotillard',[ 'une personne', 'est une femme', 'est blanc', 'est un acteur', 'est Français', 'a remporté l''Oscar de la meilleure actrice en 2008', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Angelina Jolie',[ 'une personne', 'est une femme', 'est blanc', 'est un acteur', 'est Américain', 'a joué dans "l''Echange"', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Keira Knightley',[ 'une personne', 'est une femme', 'est blanc', 'est un acteur', 'est Anglais', 'a joué dans "Pirate des caraïbes"', 'a entre 15 et 30 ans', 'est connu depuis 5 ans et plus']). schmilblick('Laura Manaudou',[ 'une personne', 'est une femme', 'est blanc', 'est un sportif', 'est Français', 'est une grande championne de natation', 'a entre 15 et 30 ans', 'est connu depuis moins de 5 ans']). schmilblick('Venus Williams',[ 'une personne', 'est une femme', 'est noir', 'est un sportif', 'est Americain', 'a gagné Masters Cup feminin 2008', 'a entre 15 et 30 ans', 'est connu depuis moins de 5 ans']). schmilblick('Beyoncé',[ 'une personne', 'est une femme', 'est noir', 'est un chanteur', 'est Americain', 'a sorti l''album "I am ... Sasha Fierce"', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Madonna',[ 'une personne', 'est une femme', 'est blanc', 'est un chanteur', 'est Americain', 'a sorti l''album "Hard Candy"', 'a plus de 50 ans', 'est connu depuis 5 ans et plus']). schmilblick('Dido',[ 'une personne', 'est une femme', 'est blanc', 'est un chanteur', 'est Anglais', 'a sorti l''album "Safe Trip Home"', 'a entre 30 et 50 ans', 'est connu depuis 5 ans et plus']). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Prédicats de manipulation des listes de critères % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % garde tous les éléments de la liste qui possèdent la caractéristique et supprime la caractéristique de la liste des caractéristiques du shmilblick garder([],_,[]). garder([[Inconnu,L1]|R1],Caract,[[Inconnu,L2]|R2]):-memberchk(Caract,L1),select(Caract,L1,L2),garder(R1,Caract,R2),!. garder([[_,_]|R1],Caract,R2):-garder(R1,Caract,R2). % supprime tous les éléments de la liste qui possèdent la caractéristique supprimer([],_,[]). supprimer([[Inconnu,L]|R1],Caract,[[Inconnu,L]|R2]):-not(memberchk(Caract,L)),supprimer(R1,Caract,R2),!. supprimer([[_,_]|R1],Caract,R2):-supprimer(R1,Caract,R2). % Récupère la liste des caractéristiques (autres que la famille, le régime alimentaire et la taille) des shmiblicks possibles cara([],[]). cara([[_,R]|R2],[R|R3]):-cara(R2,R3). % récupère la liste des types de shmiblic (animal, objet ou personne) liste_objets(Z):-findall(X,schmilblick(_,[X|_]),Y),list_to_set(Y,Z). % liste la base de connaissances lister_base:-liste_objets(Z),lister_base(Z). lister_base([]). lister_base([T|R]):-findall(X,schmilblick(X,[T|_]),Y),write(T),writeln(':'),writeln(Y),writeln(''),lister_base(R). % permet de déterminer à quelle catégorie d'objet appartient le shmiblick (objet / personne / animal ?) jouer:-liste_objets(Z),jouer(Z),!. jouer([X]):-writeln(X),lancement(X),!. jouer([T|R]):-length([T|R],Longueur),Tmp is random(Longueur),nth0(Tmp,[T|R],Elem),write('Est-ce que le shmilblic est '),write(Elem),writeln(' ?'),read(C), (C = 'oui' -> lancement(Elem); true), % lance le jeu avec la catégorie que l'on vient de trouver (C = 'non' -> select(Elem, [T|R], Rest),jouer(Rest); true),!. % cherche la catégorie dans celles restantes % Récupère la liste des shmilblick de la catégorie spécifiée (objet/animal/personne) avec leurs caractéristiques puis lance l'algo de déterminisme correspondant %lancement(Cat):-findall([Inconnu,Caract],schmilblick(Inconnu,[Cat|Caract]),Liste),caracteristiques(Cat,Ens),algo(Liste,Ens). % Ens est l'ensemble des caractéristiques possibles pour la catégorie Cat dans la base de connaissances lancement('un animal'):-findall([Inconnu,Caract],schmilblick(Inconnu,['un animal'|Caract]),Liste),famille(Ens),algo_famille(Liste,Ens). lancement('une personne'):-findall([Inconnu,Caract],schmilblick(Inconnu,['une personne'|Caract]),Liste),sexe(Ens),algo_sexe(Liste,Ens). lancement('un objet'):-findall([Inconnu,Caract],schmilblick(Inconnu,['un objet'|Caract]),Liste),lieu(Ens),algo_lieu(Liste,Ens). % Permet de déterminer le shmilblick avec les critères supplémentaires - Algorithme général algo([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo(_,[]):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo([[X,_]],_):-write('Le shmilblick est '),write(X),writeln('!'),!. algo([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2); true), % supprime tous les éléments de la liste qui ne possèdent pas la caractéristique (C = 'non' -> supprimer([T|R],Caract,Liste2); true), % supprime tous les éléments de la liste qui possèdent la caractéristique select(Caract, Ens, Ens2),algo(Liste2,Ens2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Algorithmes propres aux animaux % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Permet de déterminer la famille de l'animal algo_famille([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_famille(L,[Fam]):-garder(L,Fam,L2),regime(Reg),algo_regime(L2,Reg),!. algo_famille([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),regime(Reg),algo_regime(Liste2,Reg); true), % supprime tous les animaux de la liste qui ne sont pas de la famille spécifiée puis lance l'algorithme de recherche du régime alimentaire (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_famille(Liste2,Ens2); true). % supprime tous les animaux de la liste qui sont de la famille spécifiée % Permet de déterminer le régime alimentaire de l'animal algo_regime([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_regime(L,[Reg]):-garder(L,Reg,L2),taille(Taille),algo_taille(L2,Taille),!. algo_regime([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),taille(Taille),algo_taille(Liste2,Taille); true), % supprime tous les animaux de la liste qui n'ont pas le régime alimentaire spécifié puis lance l'algorithme de recherche de taille de l'animal (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_regime(Liste2,Ens2); true). % supprime tous les animaux de la liste qui ont le régime alimentaire spécifié % Permet de déterminer la taille de l'animal algo_taille([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_taille(L,[Taille]):-garder(L,Taille,L2),cara(L,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Ens),algo(L2,Ens),!. algo_taille([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),cara(Liste2,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Toto3),algo(Liste2,Toto3); true), % supprime tous les animaux de la liste qui n'ont pas la taille spécifiée puis lance l'algorithme global de recherche du schmilblick (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_taille(Liste2,Ens2); true). % supprime tous les animaux de la liste qui ont la taille spécifiée %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Algorithmes propres aux personnes % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Permet de déterminer le sexe de la personne algo_sexe([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_sexe(L,[Toto]):-garder(L,Toto,L2),peau(Peau),algo_peau(L2,Peau),!. algo_sexe([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),peau(Peau),algo_peau(Liste2,Peau); true), % supprime toutes les personnes de la liste qui ne sont pas du sexe spécifié puis lance l'algorithme de recherche de la couleur de peau (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_sexe(Liste2,Ens2); true). % supprime toutes les personnes de la liste qui sont du sexe spécifié % Permet de déterminer la couleur de peau de la personne algo_peau([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_peau(L,[Toto]):-garder(L,Toto,L2),categorie(Cat),algo_categorie(L2,Cat),!. algo_peau([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),categorie(Cat),algo_categorie(Liste2,Cat); true), % supprime toutes les personnes de la liste qui n'ont pas la couleur de peau spécifiée puis lance l'algorithme de recherche de la catégorie de la personne (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_peau(Liste2,Ens2); true). % supprime toutes les personnes de la liste qui ont la couleur de peau spécifiée % Permet de déterminer la catégorie de la personne algo_categorie([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_categorie(L,[Cat]):-garder(L,Cat,L2),cara(L,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Ens),algo(L2,Ens),!. algo_categorie([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),cara(Liste2,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Toto3),algo(Liste2,Toto3); true), % supprime toutes les personnes de la liste qui ne sont pas dans la catégorie spécifié puis lance l'algorithme global de recherche du schmiblick (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_categorie(Liste2,Ens2); true). % supprime toutes les personnes de la liste qui sont dans la catégorie spécifiée %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Algorithmes propres aux objets % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Permet de déterminer le sexe de la personne algo_lieu([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_lieu(L,[Toto]):-garder(L,Toto,L2),poids(Poids),algo_poids(L2,Poids),!. algo_lieu([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),poids(Poids),algo_poids(Liste2,Poids); true), % supprime tous les objets de la liste qui ne se trouvent pas à l'endroit spécifié puis lance l'algorithme de recherche du poids de l'objet (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_lieu(Liste2,Ens2); true). % supprime tous les objets de la liste qui se trouvent à l'endroit spécifié % Permet de déterminer la couleur de peau de la personne algo_poids([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_poids(L,[Toto]):-garder(L,Toto,L2),matiere(Mat),algo_matiere(L2,Mat),!. algo_poids([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),matiere(Mat),algo_matiere(Liste2,Mat); true), % supprime tous les objets de la liste qui n'ont pas le poids spécifié puis lance l'algorithme de recherche de la matière de l'objet (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_poids(Liste2,Ens2); true). % supprime tous les objets de la liste qui ont le poids spécifié % Permet de déterminer la catégorie de la personne algo_matiere([],_):-writeln('Le shmilblick n''a pas pu être déterminé !'),!. algo_matiere(L,[Mat]):-garder(L,Mat,L2),cara(L,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Ens),algo(L2,Ens),!. algo_matiere([T|R],Ens):-length(Ens,Longueur),Tmp is random(Longueur),nth0(Tmp,Ens,Caract),write('Est-ce que le shmilblic '),write(Caract),writeln(' ?'),read(C), (C = 'oui' -> garder([T|R],Caract,Liste2),cara(Liste2,Toto),flatten(Toto,Toto2),list_to_set(Toto2,Toto3),algo(Liste2,Toto3); true), % supprime tous les objets de la liste qui ne sont pas dans la matière spécifié puis lance l'algorithme global de recherche du schmilblick (C = 'non' -> supprimer([T|R],Caract,Liste2),select(Caract,Ens,Ens2),algo_matiere(Liste2,Ens2); true). % supprime tous les objets de la liste qui sont dans la matière spécifiée % Début du jeu avec affichage du menu load:-writeln('a. Jouer'),writeln('b. Afficher la base de connaissances'),writeln('c. Quitter'),read(X), (X = 'a' -> jouer; true), (X = 'b' -> lister_base,load; true), (X = 'c' -> true).