Я пишу программу, для которой мне нужны термины в их префиксной записи. Смысл в том, чтобы иметь возможность анализировать математические выражения с префиксной нотацией, сохраняя при этом правильный порядок операций. Затем я хочу сохранить результат в базе данных для последующего использования (используя assert), что включает перевод на другой язык, который использует префиксную нотацию. Все операторы Prolog имеют фиксированный приоритет, который я хочу использовать, поскольку я буду использовать все виды операторов (включая операторы clp).
Как и другие, мне нужно включить полные математические выражения, такие как как оператор равенства. Таким образом, я не могу рекурсивно использовать оператор Univ (= ..), потому что он не будет принимать операторы равенства et c. Или я могу как-то использовать = ..?
По сути, я хочу работать с внутренним представлением
N is 3*4+5 % just a random example
, которое будет
is(N,+(*(3,4),5))
Теперь я делаю знаю, что я могу использовать, write_canonical(N is 3*4+5)
, чтобы получить внутреннее представление, как показано выше.
Так есть ли способ каким-то образом получить внутреннее представление в виде термина, списка или чего-то еще. Можно ли связать вывод write_canonical с переменной?
Надеюсь, мой вопрос достаточно ясен.