2

我在 Prolog 中有下面的代码,我用 Java 制作了一个 GUI。

在这个 gui 中,我有一些带有症状的复选框,我只想传递 findDiseases 谓词列表中单击的症状。谁能告诉我我该怎么做?我唯一知道的是如何调用开始谓词..

start:-
   findDiseases([headache,weakness,heartbeat], Diseases),
   one_occurrence(Diseases, DiseasesNoDup),
   write(DiseasesNoDup).

findDiseases(PositiveSymptoms, Diseases) :-
   findDiseases(PositiveSymptoms, Diseases, []).

findDiseases([], Answer, Answer).
findDiseases([H|T], Diseases, Answer) :-
   findall(
      Disease,
      (
         kb(Disease,Simptoms_list,Feauture_list),
         (member(H,Simptoms_list);member(H,Feauture_list))
      ),
      As),
   append(As, Answer, NewAnswer),
   findDiseases(T, Diseases, NewAnswer).

% kb(diagnosis,symptoms_list,features_list).    
kb(iron_defficiency,
   [headache, dizziness, cold, weakness, fatigue, heartbeat, loose_concentration, swelling_tongue, breath],
   [gender, pregnancy, vitamin_poor_diet, fe, feritin, b12, hb, hct, mcv, plt, wbc, rtc]
).

kb(thalassemia,
   [loose_appetite, painful_spleen, pale_skin],
   [gender, pregnancy, parent1, parent2, face_features, fe, feritin, b12, hb, hct, mcv, plt, wbc, hbf, hba1, hba2, rtc]
).

kb(minor_thalassemia,
   [headache, fatigue, weakness, pale_skin, swelling_tongue, cold, heartbeat, loose_concentration, breath, dizziness],
   [vitamin_poor_diet, gender, pregnancy, parent1, parent2, hbaf, hba2, fe, feritin, b12, hb, hct, mcv, plt, wbc, rtc]
).

kb(drepanocytocis,
   [headache, weakness, fatigue, pale_skin, swelling_tongue, cold, loose_concentration, breath, dizziness, heartbeat, ulcers, painful_spleen, pain_in_extrimity],
   [gender, pregnancy, vitamin_poor_diet, shape_rbc, hbs, hbf, fe, feritin, b12, hb, hct, mcv, plt, wbc, rtc]
).


yposynolo([X],[X]).
yposynolo([H|Tail],[X]) :-
   (H==X),
   yposynolo(Tail,[X]).

yposynolo([X],[H|Tail]) :- member(X,[H|Tail]).

yposynolo([H1|Tail1],[H2|Tail2]) :-
   member(H1,[H2|Tail2]),
   yposynolo(Tail1,[H2|Tail2]).

same_elements(List1,List2) :-
   yposynolo(List1,List2),
   yposynolo(List2,List1).

unique_appearance([X]).
unique_appearance([H|Tail]) :-
   (\+member(H,Tail)),
   unique_appearance(Tail).

one_occurrence([H1|Tail1],[H2|Tail2]) :-
   same_elements([H1|Tail1],[H2|Tail2]),
   unique_appearance([H2|Tail2]).
4

0 回答 0