Reputation: 33
I cannot figure out what's the problem in this code. Please help me out. I get this error:
ERROR: c:/users/ahmed/downloads/test.pl:2:4: Syntax error: Operator expected
% c:/Users/Ahmed/Downloads/test.pl compiled 0.00 sec, 21 clauses
Here is the code:
domains
disease,indication = symbol
Patient,name = string
predicates
hypothesis(string,disease)
symptom(name,indication)
response(char)
go
clauses
go :-
write("What is the patient's name? "),
readln(Patient),
hypothesis(Patient,Disease),
write(Patient,"probably has ",Disease,"."),nl.
go :-
write("Sorry, I don't seem to be able to"),nl,
write("diagnose the disease."),nl.
symptom(Patient,fever) :-
write("Does ",Patient," have a fever (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,rash) :-
write("Does ",Patient," have a rash (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,headache) :-
write("Does ",Patient," have a headache (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,runny_nose) :-
write("Does ",Patient," have a runny_nose (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,conjunctivitis) :-
write("Does ",Patient," have a conjunctivitis (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,cough) :-
write("Does ",Patient," have a cough (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,body_ache) :-
write("Does ",Patient," have a body_ache (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,chills) :-
write("Does ",Patient," have a chills (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,sore_throat) :-
write("Does ",Patient," have a sore_throat (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,sneezing) :-
write("Does ",Patient," have a sneezing (y/n) ?"),
response(Reply),
Reply='y'.
symptom(Patient,swollen_glands) :-
write("Does ",Patient," have a swollen_glands (y/n) ?"),
response(Reply),
Reply='y'.
hypothesis(Patient,measles) :-
symptom(Patient,fever),
symptom(Patient,cough),
symptom(Patient,conjunctivitis),
symptom(Patient,runny_nose),
symptom(Patient,rash).
hypothesis(Patient,german_measles) :-
symptom(Patient,fever),
symptom(Patient,headache),
symptom(Patient,runny_nose),
symptom(Patient,rash).
hypothesis(Patient,flu) :-
symptom(Patient,fever),
symptom(Patient,headache),
symptom(Patient,body_ache),
symptom(Patient,conjunctivitis),
symptom(Patient,chills),
symptom(Patient,sore_throat),
symptom(Patient,runny_nose),
symptom(Patient,cough).
hypothesis(Patient,common_cold) :-
symptom(Patient,headache),
symptom(Patient,sneezing),
symptom(Patient,sore_throat),
symptom(Patient,runny_nose),
symptom(Patient,chills).
hypothesis(Patient,mumps) :-
symptom(Patient,fever),
symptom(Patient,swollen_glands).
hypothesis(Patient,chicken_pox) :-
symptom(Patient,fever),
symptom(Patient,chills),
symptom(Patient,body_ache),
symptom(Patient,rash).
hypothesis(Patient,measles) :-
symptom(Patient,cough),
symptom(Patient,sneezing),
symptom(Patient,runny_nose).
response(Reply) :-
readchar(Reply),
write(Reply),nl.
Upvotes: 0
Views: 3113
Reputation: 60014
to be able to run that code in SWI-Prolog, you could replace starting lines (until go :-
...) in this way:
:- redefine_system_predicate(write(_)).
:- redefine_system_predicate(readln(_)).
write(S) :-
is_list(S) -> format('~s', [S]) ; format('~w', [S]).
write(A,B,C,D) :-
maplist(write, [A,B,C,D]).
write(A,B,C) :-
maplist(write, [A,B,C]).
readchar(S) :-
get(C), atom_codes(S, [C]).
readln(A) :-
system:readln(L), atomic_list_concat(L,' ',A).
go :-
...
after those 'adapter' predicates
?- go.
What is the patient's name? Carlo
Does Carlo have a fever (y/n) ?y
y
Does Carlo have a cough (y/n) ?|: y
y
Does Carlo have a conjunctivitis (y/n) ?|: y
y
Does Carlo have a runny_nose (y/n) ?|: y
y
Does Carlo have a rash (y/n) ?|: y
y
Carloprobably has measles.
true .
Now it's time to know what is a measles. Going to Wikipedia... :)
Upvotes: 1
Reputation: 42277
You're using SWI-Prolog, which follows Edinburgh syntax. The code looks like code for Visual Prolog, which follows different syntax rules. You need to port your code to the Edingburgh syntax if you want to run it under SWI-Prolog. Otherwise, you can install Visual Prolog and run the code there.
Upvotes: 3