让我说我有这两个事实。
animal(fifi,10).
animal(fofo,20).
如果我打电话
animal(X,Y).
然后Prolog将返回我
X = fifi,
Y = 10 ;
X = fofo,
Y = 20.
我需要做什么,让Prolog只根据事实给我返回Y值最高的动物X?
是否有任何可能的方法只显示X的最高值而不是一起显示X和Y?
答案 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|_]).