Я использую древний Турбо Пролог, так как он включен в наш учебный план. Почему эта программа не работает?
domains
disease, indication = symbol
Patient = string
Fe,Ra,He,Ch,Vo,Ru = char
predicates
hypothesis(Patient,disease)
symptom(Patient,indication,char)
response(char)
go
clauses
go:-
write("What is patient's name?"),
readln(Patient),
symptom(Patient,fever,Fe),
symptom(Patient,rash,Ra),
symptom(Patient,head_ache,He),
symptom(Patient,chills,Ch),
symptom(Patient,runny_nose,Ru),
symptom(Patient,head_ache,He),
symptom(Patient,vomit,Vo),
hypothesis(Patient,Disease),
write(Patient," probably has ", Disease , "."),nl.
go:-
write("Sorry unable to seem to be diagnose disease"),nl.
symptom(Patient,Fever,Feedback) :-
Write("Does " , Patient , " have " , Fever , "(y/n) ?"),
response(Reply),
Feedback = Reply.
hypothesis(Patient, chicken_pox) :-
Fe = Ra = He = Ch = 'y'.
hypothesis(Patient, caner) :-
Ru = Ra = He = Vo = 'y'.
hypothesis(Patient, measles) :-
Vo = Ra = Ch = Fe = He = 'y'.
response(Reply):-
readchar(Reply),
write(Reply),nl.
Я получаю, что переменная предупреждения используется только во всех строках, которые содержат symtoms
. Разве параметр не передает вызов по ссылке? Когда я передаю Fe
в symptoms
значение должно быть скопировано в Fe
, и когда я сравниваю его в гипотезе, оно должно работать соответствующим образом. =
оператор в Turbo Prolog работает очень странно. Когда он не связан ни с одной переменной, оператор a = 3
назначит 3 для a, а когда a уже содержит значение a = 5
, проверит, равно ли значение a 5 или нет.
Пожалуйста, помогите мне, почему программа не работает?
Заранее спасибо:)