Я пишу программу проверки разрешения в прологе, которая принимает входные данные в форме
[[(a or b) equiv neg(c and d)]]
et c. И преобразует их в CNF. Все логические операторы работают нормально, но когда программа пытается развернуть операцию equiv
, скобки go отсутствуют. Например, выполнение одного шага алгоритма на
[[(a and b) equiv c]]
дает результат
[[neg(a and b) or c], [neg c or a and b]]
Во втором предложении скобки вокруг a and b
были удалены, а они остаются в первый пункт. Почему это происходит?
Для справки: это - это мой код, а команда, дающая этот вывод, - singlestep([[(a and b) equiv c]], X).
Специфический c код того, как следует обращаться с equiv
: в строке 93, а функция singlestep
находится в строке 108.