这可能很简单,但我在任何地方都找不到答案。在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中有这样的东西吗?
发布于 2018-01-29 19:47:49
不,它没有cut运算符。一般来说,Cut不是Datalog的一部分。
但是,pyDatalog在找到函数的给定参数的第一个值后停止。reference page说:“函数的定义应该首先使用最一般的子句,然后是更具体的子句。当查询函数时,首先使用最后一个子句,当找到答案时,查询停止。”
因此,您可以通过以下定义获得所需的内容:
+ (max[X,Y] == Y)
(max[X,Y] == X) <= (Y < X)但是请注意,这里有一个open issue。
https://stackoverflow.com/questions/48497742
复制相似问题