Есть ли в 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)

Обратите внимание, что существует открытая проблема.

Другие вопросы по тегам