Есть ли в pyDatalog оператор "cut", такой как пролог?
Это может быть довольно просто, но я нигде не могу найти ответ. В Прологе, когда вы хотите запретить ему искать дополнительные ответы, когда экземпляр уже создан, вы можете использовать! знак (обычно называется "вырезать" знак). Вы можете увидеть его в этой ссылке, чтобы понять, что я имею в виду: http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse44
например, учитывая правило:
max(X,Y,Z) :- X =< Y,!, Y = Z.
если мы запросим:
max(X,Y,X).
! Знак будет препятствовать прологу откатываться назад и пытаться доказать (X = Есть ли что-то подобное в pyDatalaog?
1 ответ
Нет, у него нет оператора вырезания. Cut не является частью Datalog, в целом.
Однако pyDatalog останавливается после нахождения первого значения для заданных аргументов функции. На странице ссылки написано: "сначала следует определить функцию с наиболее общим предложением, а затем с более конкретными предложениями. При запросе функции сначала используется последняя, и запрос останавливается, когда найден ответ".
Таким образом, вы можете получить то, что вам нужно, с помощью следующего определения:
+ (max[X,Y] == Y)
(max[X,Y] == X) <= (Y < X)
Обратите внимание, что существует открытая проблема.