首页 > 解决方案 > 计算列表中参数的排名

问题描述

我的问题是如何编写一个程序'ranking(List, Item, rank)',给定一个List和Item将计算列表索引,整数列表N使得Item是列表List的第N个项目。例如:

ranking([a,b,c,d,d,c,b,a], a, Rank)    Rank= [1,8] 
ranking([a,b,c,d,d,c,b,a], b, Rank)    Rank = [2,7]
ranking([a,b,c,d,d,c,b,a], c, Rank)    Rank = [3,6] 
ranking([a,b,c,d,d,c,b,a], e, Rank)    Rank = []

这是我尝试过的:

ranking([E|_], E, 1).
ranking([_|T], E, I) :- ranking(T, E, I2), I is I2 + 1.

我得到了什么:

ranking([a,b,c,a,d], a, R).
R = 1 ? ;
R = 4 ? ;

我不知道如何收集职位并将它们放入列表中。就像:R = [1,4]。

标签: prolog

解决方案


我会使用findall /3 和nth1 /3 内置:

ranking(Es,E,Rs) :- findall(I,nth1(I,Es,E),Rs).

推荐阅读