Prolog从集合中获取最大收益

卡尔斯

这是一个简单的问题。

has(steve, 5).
has(mark, 6).
has(craig, 4).

在Prolog中,您如何从中获得最大收益?

我已经尝试过了,has(Who, Max)但这无济于事。这里有可以使用的运算符吗?

谢谢。

头发C.
?- has(U,S),\+((has(V,T),T>S)).
U = mark,
S = 6 ;
false.

前缀运算符\+读为not由于我们必须证明的是由infix运算符表示的连接,,因此需要使用双括号。

您应该意识到,使用Prolog语义时,它是一种受限的否定形式,即作为失败的否定,它是隐含在Prolog语义中封闭世界假设实现的。

或者,完全一样

max(U,S) :- has(U,S),notanybetterthan(S).

notanybetterthan(S) :- has(_,T),T>S,!,fail.
notanybetterthan(_).

要么

max(U,S) :- has(U,S),\+anybetterthan(S).

anybetterthan(S) :- has(_,T),T>S.

编辑

正如@WillNess指出的那样,我使用的语法不精确。的确,双括号是\+被视为函子而不是运算符的结果我们可以在符号后面添加空格

?- has(U,S),\+ (has(V,T),T>S).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章