Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带else的Prolog if语句_Prolog - Fatal编程技术网

不带else的Prolog if语句

不带else的Prolog if语句,prolog,Prolog,我以前也看到过类似的帖子,但我似乎还是被卡住了。我当前的if语句,即使失败,也会输出“if true”代码。所以我想问,如果条件变为false,我不想做任何其他事情,那么正确的语法是什么 我的失败代码: (Disease == malaria -> (patient_age(y) -> writeln('Since patient is young, likelihood of malaria increases.')

我以前也看到过类似的帖子,但我似乎还是被卡住了。我当前的if语句,即使失败,也会输出“if true”代码。所以我想问,如果条件变为false,我不想做任何其他事情,那么正确的语法是什么

我的失败代码:

(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%