Я пытаюсь конвертировать из этой записи:
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] ).