1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| metier(boulanger).
metier(boucher).
metier(charpentier).
% les métiers sont définis dans les faits
init_metier(personne(_,_,Metier)) :-
metier(Metier).
go :-
% on cree directement la liste des différentes personnes
% a mon avis ce n'est pas ça qui est important dans le problème
Persons =
[personne(boulanger, pere, _MBLP),
personne(boulanger, fils, _MBLF),
personne(boucher, pere, _MBCP),
personne(boucher, fils, _MBCF),
personne(charpentier, pere, _MCP),
personne(charpentier, fils, _MCF)],
% on initialise les métiers
% Boucher fils est boulanger.
member(personne(boucher, fils, boulanger), Persons),
maplist(init_metier, Persons),
% on exprime que les metiers sont differents du nom
forall(member(personne(Name, _, Metier), Persons),
...........................),
% on exprime que pere et fils n'ont pas le meme
forall(............................................................................,
...................................),
% Boulanger père fait le même métier que Charpentier fils.
.......................................................
......................................................
% affichage des resultats
maplist(writeln, Persons). |
Partager