不带else的Prolog if语句
我以前也看到过类似的帖子,但我似乎还是被卡住了。我当前的if语句,即使失败,也会输出“if true”代码。所以我想问,如果条件变为false,我不想做任何其他事情,那么正确的语法是什么 我的失败代码:不带else的Prolog if语句,prolog,Prolog,我以前也看到过类似的帖子,但我似乎还是被卡住了。我当前的if语句,即使失败,也会输出“if true”代码。所以我想问,如果条件变为false,我不想做任何其他事情,那么正确的语法是什么 我的失败代码: (Disease == malaria -> (patient_age(y) -> writeln('Since patient is young, likelihood of malaria increases.')
(Disease == malaria
-> (patient_age(y)
-> writeln('Since patient is young, likelihood of malaria increases.')
; true)
;
Disease == tuberculosis
-> (patient_age(e)
-> writeln('Since patient is old, likelihood of tuberculosis increases.')
; true)
).
发生的情况是,即使patient_age()为false,writeln()语句仍会执行。我尝试用另一个未显示的writeln()语句替换“false code”。我很抱歉以前有人问过这个问题。非常感谢。重写代码以避免使用if-then-else控件构造将更具声明性、惯用性和清晰性。例如:
% likelihood(Disease, PatientAge)
likelihood(malaria, y) :-
writeln('Since patient is young, likelihood of malaria increases.').
likelihood(tuberculosis, e) :-
writeln('Since patient is old, likelihood of tuberculosis increases.').
print_diagnostic(PatientAge) :-
likelihood(Disease, PatientAge),
write('Increased likelihood of '), write(Disease), nl.
不过,最好还是将写入的消息移动到调用似然/2
谓词的谓词。例如:
% likelihood(Disease, PatientAge)
likelihood(malaria, y) :-
writeln('Since patient is young, likelihood of malaria increases.').
likelihood(tuberculosis, e) :-
writeln('Since patient is old, likelihood of tuberculosis increases.').
print_diagnostic(PatientAge) :-
likelihood(Disease, PatientAge),
write('Increased likelihood of '), write(Disease), nl.
协议系数100%