Prolog 序言:在对象中查找最大值

Prolog 序言:在对象中查找最大值,prolog,Prolog,我的目标是找到一些对象的最大值,或者更一般地说是一个算术表达式 下面是一个例子: card(one). card(two). card(three). value(one,10). value(two,20). value(three,30). 很明显,“赢家”是第三张牌。但我不知道如何构建一个谓词,它能够将一个对象的每个值和其他值进行比较 编辑:我试过这个 winner(X):- card(X), value(X, ValueX), card(Y), value(Y, ValueY), V

我的目标是找到一些对象的最大值,或者更一般地说是一个算术表达式

下面是一个例子:

card(one).
card(two).
card(three).

value(one,10).
value(two,20).
value(three,30).
很明显,“赢家”是第三张牌。但我不知道如何构建一个谓词,它能够将一个对象的每个值和其他值进行比较

编辑:我试过这个

winner(X):- card(X), value(X, ValueX), card(Y), value(Y, ValueY), ValueX <   ValueY.
赢家(X):-卡(X)、值(X,ValueX)、卡(Y)、值(Y,ValueY)、值X
结果是“赢家”,但我需要的“绝对赢家”只有一个。 在上面的例子中,我们有卡2和卡3,因为卡2赢1,卡3赢2。所以我们有两个赢家,但绝对赢家只有第三张牌。
有没有办法做到这一点?

这里有一些想法可以借鉴。您应该运行Prolog解释器,并在中输入您的事实。然后尝试以下查询:
card(X)。
(您将看到三个结果:
X=one
X=two
,以及
X=two
)。try、
卡(X)、值(X,ValueX)、卡(Y)、值(Y,ValueY)、值X
(注意逗号)。这将找到所有的卡
X
Y
,这样卡
X
的值小于卡
Y
的值。这是一个很好的起点。无论如何,这不是一个通用的解决方案,因为如果我没有2个而是10000个对象,我需要编写大量代码。也许我可以使用列表,但我知道列表只适用于prolog中的数字,而不适用于谓词。还有什么建议吗?我知道这不是一个普遍的解决办法。我向你们展示了一些概念,这样你们至少可以自己尝试一些东西,当你们陷入困境时,可以问一些更具体的问题。Stackoverflow并不是一个你发布任务,人们为你做所有工作的网站。也许你可以展示一下你的尝试?事实上,@Lougler的第一条评论中的代码非常通用,几乎解决了你的问题。由于您的评论向我表明您在学习Prolog方面几乎没有付出任何努力,因此我建议您尝试一个基本教程,或者在这里更努力地搜索堆栈溢出。我尝试了一个递归版本,在上面的公式中添加winner(X),但程序永远不会结束。也许我不够熟练,但如果prolog可以解决我的问题,那也没关系。