在prolog中,我们可以使用否定来选择元组中的最大值,如: p( X),not (p(Y),Y>X)。%在Prolog中工作,但不在Clingo中工作
如何使用Clingo表达式来获得相似的规则(如果没有大于A的数字,则A是最大值)。谢谢。
发布于 2020-05-06 00:50:29
我想用两个替代解决方案来扩展前面的答案。关于第一个答案,我没有做任何性能比较。
max(X) :- X= #max {Y: p(Y) }。
1{ max(X):p(X) } 1.
M >= X :- p(X),max(M)。
发布于 2020-05-05 14:21:33
以下规则可以表示如果没有比A大的数字,则A是最大。
non_max(X) :- p(X), p(Y), Y > X.
max(X) :- p(X), not non_max(X).基本上,您正在表示的规则是一个带有通用量词的规则,即
∀b∈p(b),如果a> b,则a是最大值。(1)
如果a是最大值,则∀b∈p( b ),a>b。(2)
将(2)转换为它的逆式,我们有
如果∃b∈p(b),a< b,则b不是最大值(3)
(3)的对应规则为non_max(X) :- p(X), p(Y), Y > X.
因为max和non_max是互斥的,所以我们有max(X) :- p(X), not non_max(X).
https://stackoverflow.com/questions/61543172
复制相似问题