0

这可能很简单,但我无法在任何地方找到答案。在 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 =< Y)。这意味着所有答案中的 X 将具有相同的值。

pyDatalaog 中有这样的东西吗?

4

1 回答 1

0

不,它没有 cut 运算符。一般来说,Cut 不是 Datalog 的一部分。

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

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

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

但是请注意,有一个未解决的问题

于 2018-01-29T11:47:49.030 回答