cdss.pl 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. :- encoding(utf8).
  2. :- dynamic reported_symptom/1.
  3. :- dynamic disease_score/2.
  4. :- include('main.pl').
  5. contains(Element, [Element|_]) :- !.
  6. contains(Element, [_|Tail]) :- contains(Element, Tail).
  7. clear_reported_symptoms :-
  8. retractall(reported_symptom(_)).
  9. add_reported_symptom(Symptom) :-
  10. assertz(reported_symptom(Symptom)).
  11. list_reported_symptoms :-
  12. findall(Symptom, reported_symptom(Symptom), Symptoms),
  13. ( Symptoms = []
  14. -> writeln('No symptoms')
  15. ; writeln('Symptoms:'),
  16. maplist(writeln, Symptoms)
  17. ).
  18. clear_disease_scores :-
  19. retractall(disease_score(_, _)).
  20. disease_score_add(Disease, Inc) :-
  21. disease_score(Score, Disease),
  22. NewScore is Score + Inc,
  23. retract(disease_score(Score, Disease)),
  24. assertz(disease_score(NewScore, Disease))
  25. ; assertz(disease_score(1, Disease)).
  26. possible_disease([],_).
  27. possible_disease(Disease) :-
  28. symptom(Disease, Symptoms),
  29. reported_symptom(Symptom),
  30. contains(Symptom, Symptoms),
  31. disease_score_add(Disease, 1).
  32. disease_check(Disease, CheckList):-
  33. check(Disease, CheckList).
  34. all_symptoms_present([]).
  35. all_symptoms_present([Symptom|OtherSymptom]) :-
  36. reported_symptom(Symptom),
  37. writeln(Symptom),
  38. all_symptoms_present(OtherSymptom).
  39. diagnose(DiseaseList) :-
  40. clear_disease_scores,
  41. findall(Disease, possible_disease(Disease), _),
  42. findall([Disease,Score], disease_score(Score, Disease), DiseaseScores) ,
  43. DiseaseList = DiseaseScores.