我无法弄清楚此代码中的问题是什么。请帮帮我。我收到这个错误:
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
以下是代码:
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.
答案 0 :(得分:3)
你正在使用遵循爱丁堡语法的SWI-Prolog。代码看起来像Visual Prolog的代码,它遵循不同的语法规则。如果要在SWI-Prolog下运行代码,则需要将代码移植到Edingburgh语法。否则,您可以安装Visual Prolog并在那里运行代码。
答案 1 :(得分:1)
能够在SWI-Prolog中运行该代码,你可以用这种方式替换起始行(直到go :-
...):
:- 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 :-
...
在那些'适配器'谓词之后
?- 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 .
现在是时候知道什么是麻疹了。去维基百科...... :)