Prolog:使用AND / OR op / 2评估没有回溯的逻辑表达式?

时间:2018-02-07 21:18:48

标签: prolog eval logical-operators

我正在尝试实现没有回溯行为的逻辑表达式评估。 经过一些实验,我得到了它的工作,这里是:

:- op(80, xfy, and).
:- op(80, xfy, or).

%check/evaluate logical expressions
check(true) :- !.
check(Cond and Conds) :- !, (check(Cond) , check(Conds)).
check(Cond or  Conds) :- !, (check(Cond) ; check(Conds)), !.  %% <- weird
check(Cond) :- !, call(Cond).



?- check(true and true).
true.

?- check(true and false).
false.

 ?- check(true or false).
 true.

 ?- check(true or (false and true)).
 true.

 ?- check((true or false) and (false and true)).
 false.

 ?- X = 1 , Y = 2 , check((X = 1) and (Y > 1)).
 X = 1,
 Y = 2.

所以代码有效。 我的问题是为什么它有效,特别是需要两次削减!在OR表达式中。

这看起来像是正确的Prolog实现吗?

你自己怎么做?

0 个答案:

没有答案