pyDatalog是否有像prolog这样的“剪切”运算符?

时间:2018-01-29 09:12:18

标签: operator-keyword cut logic-programming pydatalog

这可能很简单,但我无法在任何地方找到答案。在Prolog中,当您想要阻止它搜索其他答案时,一旦变量已经被实例化,您就可以使用!标志(通常称为“剪切”标志)。 你可以在这个链接中看到它,以了解我的意思: http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse44

例如,给定规则:

max(X,Y,Z)  :-  X  =<  Y,!,  Y  =  Z.

如果我们查询:

max(X,Y,X).
这个! sign会阻止prolog回溯并试图通过重新实例化X来证明(X =&lt; Y)。这意味着所有答案的X值都相同。

pyDatalaog中有这样的东西吗?

1 个答案:

答案 0 :(得分:0)

不,它没有切割操作符。通常,Cut不是Datalog的一部分。

但是,pyDatalog在找到函数的给定参数的第一个值后停止。 reference page说:“一个函数应该首先用最通用的子句定义,然后是更具体的子句。当查询一个函数时,最后一个被使用,查询在找到答案时停止。”

因此,您可以通过以下定义获得所需内容:

+ (max[X,Y] == Y)
(max[X,Y] == X) <= (Y < X)

但请注意,有一个open issue