Программа проверки разрешения пролога удаляет скобки - PullRequest
3 голосов
/ 08 мая 2020

Я пишу программу проверки разрешения в прологе, которая принимает входные данные в форме

[[(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.

...