特定の入力が数式を表しているかどうかを検証するために、述語を作成しようとしています。
p、q、r、s、t などの命題アトムにのみ使用することが許可されています。テストする式は次のとおりです。
neg(X) - represents the negation of X
and(X, Y) - represents X and Y
or(X, Y) - represents X or Y
imp(X, Y) - represents X implies Y
wff
与えられた構造が式の場合に true を返し、それ以外の場合に false を返す述語を作成しました。また、数式内で変数を使用する必要はありません。以下で説明するように、命題アトムのみを使用します。
logical_atom( A ) :-
atom( A ),
atom_codes( A, [AH|_] ),
AH >= 97,
AH =< 122.
wff(A):-
\+ ground(A),
!,
fail.
wff(and(A, B)):-
wff(A),
wff(B).
wff(neg(A)):-
wff(A).
wff(or(A, B)):-
wff(A),
wff(B).
wff(imp(A, B)):-
wff(A),
wff(B).
wff(A):-
ground(A),
logical_atom(A),
!.
このようなテストを導入する
wff(and(q, imp(or(p, q), neg(p)))).
と、呼び出しは と の両方の値を返しtrue
ますfalse
。なぜこのようなことが起こるのか教えてください。