我正在尝试制作谓词以验证给定输入是否代表公式。
我只能使用命题原子,如 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
值。你能告诉我为什么会这样吗?