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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
% list of the components
:- dynamic(community/1).
:- dynamic(mgoal/4).
:- dynamic(agoal/4).
:- dynamic(belief/4).
:- dynamic(joint/3).
:- dynamic(contain/2).
% Communities
community(pcmarket).
community(custemers).
community(pcsellers).
% Beliefs, M-Goals, A-Goal : (ID, parent, child, text)
% Joint Relationships : (ID,[parent list], [child list])
% -> id6 pour l'exemple correct !!!
mgoal(id1,null,id2,'text M-Goal1').
mgoal(id5,null,id3,'text M-Goal2').
mgoal(id6,id3,null,'text M-Goal3').
belief(id2,id1,id3,'text belief1').
belief(id4,null,id3,'text belief2').
belief(id8,null,null,'Je pense que je suis beau').
joint(id3,[id5,id2,id4],[id6]).
joint(id7,[],[]).
% What is in what
contain(pcmarket,custemers).
contain(pcmarket,pcsellers).
contain(custemers,id1).
contain(pcsellers,id2).
contain(pcsellers,id3).
contain(pcsellers,id4).
contain(pcsellers,id5).
contain(pcsellers,id6).
contain(pcsellers,id7).
contain(pcsellers,id8).
% Rules
write_type(X) :- belief(X,_,_,_),!, write('Belief').
write_type(X) :- mgoal(X,_,_,_),!, write('M-Goal').
write_type(X) :- agoal(X,_,_,_),!, write('A-Goal').
write_type(X) :- joint(X,_,_),!, write('Joint Relationship').
write_community(X) :- contain(C,X), write(C).
message_missing_component(X,T) :-
!,
write(' - Le '), write_type(X), write(' ('''), write(T),
write(''') se trouvant dans la communauté '''), write_community(X),
write('''').
message_missing_joint(X) :-
!,
write(' - Le '), write_type(X),
write(' se trouvant dans la communauté '''), write_community(X),
write('''').
%Un belief/mgoal/agoal est un component.
component(V,X,Y,Z) :- belief(V,X,Y,Z).
component(V,X,Y,Z) :- mgoal(V,X,Y,Z).
component(V,X,Y,Z) :- agoal(V,X,Y,Z).
%Un modèle doit contenir au moins une communauté.
%Une communauté doit contenir un élément.
%La suite est prise en charge par correct_arrows.
non_empty :-
community(X),contain(X,_),!.
%Tous les éléments ont au moins le minimum de flèches.
correct_arrows :-
\+(isolated_element),
\+(missing_child_element),
\+(missing_parent_element),!.
%Un belief/mgoal/agoal ne peut pas être isolé
%Un jointrel non plus, mais lui doit avoir
%au moins un parent et un enfant.
isolated_element :- component(X,null,null,T),
!,
message_missing_component(X,T),
write(' ne devrait pas être complétement isolé.'),
nl.
%Un belief/jointrel doit avoir un enfant.
missing_child_element :- joint(J,_,X),length(X,L),L==0,
!,
message_missing_joint(J),
write(' devrait avoir un fils.'),
nl.
missing_child_element :- belief(X,_,null,T),
!,
message_missing_component(X,T),
write(' devrait avoir un fils.'),
nl.
%Un jointrel doit avoir un parent.
missing_parent_element :- joint(_,X,_),length(X,L),L==0,
!,
message_missing_joint(X),
write(' devrait avoir un parent.'),
nl.
%Vérifier que le modèle respecte les règles de bases.
correct_model :-
non_empty, correct_arrows,
!,
write('Le modèle n''a pas de problème de connexion apparent.'),
nl.
%Si le modèle a un problème, il faut lister les éléments qui
%posent le problèmes avec leur texte.
correct_model :-
!,
write('Le modèle n''est pas complet.'),nl,
write('Veuillez régler les problèmes listés ci-dessus.'). |
Partager