这可能很简单,但我无法在任何地方找到答案。在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中有这样的东西吗?
答案 0 :(得分:0)
不,它没有切割操作符。通常,Cut不是Datalog的一部分。
但是,pyDatalog在找到函数的给定参数的第一个值后停止。 reference page说:“一个函数应该首先用最通用的子句定义,然后是更具体的子句。当查询一个函数时,最后一个被使用,查询在找到答案时停止。”
因此,您可以通过以下定义获得所需内容:
+ (max[X,Y] == Y)
(max[X,Y] == X) <= (Y < X)
但请注意,有一个open issue。