为了推理 Prolog 中的不确定性,您可以为三值逻辑编写一个解释器。在这个解释器中,真值是true
、false
和unknown
:
:- initialization(main).
main :-
three_valued_logic(((true,false);unknown),Result),
writeln(Result).
three_valued_logic(true,true).
three_valued_logic(false,false).
three_valued_logic(unknown,unknown).
three_valued_logic(not(A),false) :-
three_valued_logic(A,true).
three_valued_logic(not(A),true) :-
three_valued_logic(A,false).
three_valued_logic(not(A),unknown):-
three_valued_logic(A,unknown).
three_valued_logic((A,B),true) :-
three_valued_logic([A,B],[A1,B1]),
(A1==true;B1==true).
three_valued_logic((A,B),false) :-
three_valued_logic([A,B],[A1,B1]),
(A1==false;B1==false).
three_valued_logic((A,B),unknown) :-
three_valued_logic([A,B],[A1,B1]),
(A1==unknown;B1==unknown).
three_valued_logic((A;B),unknown) :-
three_valued_logic([A,B],[A1,B1]),
(A1==unknown;B1==unknown),(A1==false;B1==false).
three_valued_logic((A;B),false) :-
three_valued_logic([A,B],[A1,B1]),
(A1==false,B1==false).
three_valued_logic((A;B),true) :-
three_valued_logic([A,B],[A1,B1]),
(A1==true;B1==true).
three_valued_logic([],[]).
three_valued_logic([A|B],[A1|B1]) :-
three_valued_logic(A,A1),three_valued_logic(B,B1).
在这个例子中,真值((true,false);unknown)
是unknown,
,而是。(false,unknown)
false