我正试图转换这种表示法:
A and (B or C) equ A and B or A and C)
标准逻辑表示法,例如and(A,B), or(A,B), neg(A)...
我认为这样做的好方法就是使用DCG(我提出这个问题因为我想练习DCG)。有什么想法为什么我的转换不起作用?到目前为止,我只是在得到一个变量时编写了析取和案例。我想要的答案应该是或(原子(X),原子(Y))。
convert1(atom(X)) --> [X], {var(X)},!.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).
test_convert1( F ) :-
phrase( convert1( F ), [X, or, Y] ).
答案 0 :(得分:1)
您的代码包含两个错误:
X
。工作版本是:
convert1(atom(X)) --> [X], {var(X)}, !.
convert1(or(X,Y)) --> convert1(X), [or], convert1(Y).
答案 1 :(得分:1)
test_convert1/1
中存在语法错误。它应该读
test_convert1(F) :-
phrase(convert1(F), [X, or, Y]).