1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- :- encoding(utf8).
- :- dynamic reported_symptom/1.
- :- dynamic disease_score/2.
- :- include('main.pl').
- contains(Element, [Element|_]) :- !.
- contains(Element, [_|Tail]) :- contains(Element, Tail).
- clear_reported_symptoms :-
- retractall(reported_symptom(_)).
- add_reported_symptom(Symptom) :-
- assertz(reported_symptom(Symptom)).
- list_reported_symptoms :-
- findall(Symptom, reported_symptom(Symptom), Symptoms),
- ( Symptoms = []
- -> writeln('No symptoms')
- ; writeln('Symptoms:'),
- maplist(writeln, Symptoms)
- ).
- clear_disease_scores :-
- retractall(disease_score(_, _)).
- disease_score_add(Disease, Inc) :-
- disease_score(Score, Disease),
- NewScore is Score + Inc,
- retract(disease_score(Score, Disease)),
- assertz(disease_score(NewScore, Disease))
- ; assertz(disease_score(1, Disease)).
- possible_disease([],_).
- possible_disease(Disease) :-
- symptom(Disease, Symptoms),
- reported_symptom(Symptom),
- contains(Symptom, Symptoms),
- disease_score_add(Disease, 1).
- disease_check(Disease, CheckList):-
- check(Disease, CheckList).
- all_symptoms_present([]).
- all_symptoms_present([Symptom|OtherSymptom]) :-
- reported_symptom(Symptom),
- writeln(Symptom),
- all_symptoms_present(OtherSymptom).
- diagnose(DiseaseList) :-
- clear_disease_scores,
- findall(Disease, possible_disease(Disease), _),
- findall([Disease,Score], disease_score(Score, Disease), DiseaseScores) ,
- DiseaseList = DiseaseScores.
|