?- or(A,false,C).
A = C, C = true ;
A = C, C = u ;
false.
or3(A, B, C) :-
if_( C = u
, if_( A = u
, ( B = u ; B = false)
, ( A = false, B = u )
),
if_( C = true
, if_( A = true
, ( B = true ; B = false)
, ( A = false, B = true )
)
, false
)
).
?- or3(A,false,C).
Correct to: "tri_logic:or3(A,false,C)"? yes
A = C, C = u ;
A = C, C = true ;
false.
i还直接使用=/3和;/3尝试实现仅适用于真实值的版本,但结果甚至几乎相同:
or3(A,B,C) :-
=( C, true, T),
;( ( A = true, B = true ), ( A = true, B = false ), T1 ),
;( T1=true, ( A = false, B = true), T).
?- or3(A,false,C).
Correct to: "tri_logic:or3(A,false,C)"? yes
A = C, C = u ;
A = C, C = true ;
false.
我觉得我在这里错过了一些东西。任何帮助都非常感谢!为了防止不必要的选择点,必须将这两个参数视为simultanate
。而
if_
考虑一个值。可以使用Prolog的关系方面 - 列出可能性:
% Using table to improve determinism
:- table and_or/4.
% Bool (or u), Bool (or u), AND, OR
and_or(true, true, true, true).
and_or(false, true, false, true).
and_or(u, true, u, true).
and_or(true, false, false, true).
and_or(false, false, false, false).
and_or(u, false, false, u).
and_or(true, u, u, true).
and_or(false, u, false, u).
and_or(u, u, u, u).