我一旦適應有關Truth table maker J.R.Fischer教程頁面,解釋非常相似的任務,你所需要的。除了含義之外,我使用了不同的運算符,它非常適合( - >)/ 2。
formula(N,_,_,N) :-
member(N,[0,1]).
formula(X,Vars,A,Val) :-
atom(X),
lookup(X,Vars,A,Val).
formula(X + Y,Vars,A,Val) :-
formula(X,Vars,A,VX),
formula(Y,Vars,A,VY),
and(VX,VY,Val).
formula(X * Y,Vars,A,Val) :-
formula(X,Vars,A,VX),
formula(Y,Vars,A,VY),
or(VX,VY,Val).
formula(X -> Y,Vars,A,Val) :-
formula(X,Vars,A,VX),
formula(Y,Vars,A,VY),
imply(VX,VY,Val).
formula(- X,Vars,A,Val) :-
formula(X,Vars,A,VX),
not(VX,Val).
lookup(X,[X|_],[V|_],V).
lookup(X,[_|Vars],[_|A],V) :- lookup(X,Vars,A,V).
and(0,0,0).
and(1,1,1).
and(0,1,0).
and(1,0,0).
or(0,0,0).
or(0,1,1).
or(1,0,1).
or(1,1,1).
not(0,1).
not(1,0).
imply(0,0,1).
imply(0,1,1).
imply(1,0,0).
imply(1,1,1).
這段代碼是不是需要多一點一般情況下,獲得一定的限制呼叫所需的分配:
?- lenght(A,3),formula(q + (r -> p), [p,q,r], A, 1).
Correct to: "length(A,3)"? yes
A = [0, 1, 0] ;
A = [1, 1, 0] ;
A = [1, 1, 1] ;
false.
一個會生成和測試方法是令人滿意的? – hardmath
你可以包含' - >/2'和'&/ 2'的代碼嗎? –