prolog比较SOS

时间:2011-12-13 16:42:41

标签: prolog

让我说我有这两个事实。

animal(fifi,10).
animal(fofo,20).

如果我打电话

animal(X,Y).

然后Prolog将返回我

X = fifi,
Y = 10 ;
X = fofo,
Y = 20.

我需要做什么,让Prolog只根据事实给我返回Y值最高的动物X?

是否有任何可能的方法只显示X的最高值而不是一起显示X和Y?

2 个答案:

答案 0 :(得分:2)

或者:

max_animal(MaxAnimal) :-
    findall(Y, animal(X, Y), Ys),
    max_list(Ys, Max),
    animal(MaxAnimal, Max).

答案 1 :(得分:1)

当然,您可以构建所有动物及其值的列表,然后对列表进行排序并从中获取所需的元素:

max_animal(MaxAnimal):-
  findall(Value-Animal, animal(Animal, Value), L),
  keysort(L, Sorted),
  reverse(Sorted, [_-MaxAnimal|_]).