有没有办法知道序言列表中元素的索引?

is there any way to know the index of an element in a list in prolog?

我正在提交作业,activity 说:

给定参赛者在某一类别的跳跃中获得的分数也作为参数接收,显示跳跃编号索引(列表的顺序编号)。 例如,HUGO LENIN 在跳高比赛中获得了类别 2 的 8 分,答案应该是 2,因为它在列表中排在第二位。如果收到的分数不是在任何跳跃中获得的,return-1,如果分数重复,return你找到的第一个。

%jump(name, class, score
jump('HUGO LENIN',2,[7,8,8,5]).

%class (n° class, name class, number of attempts allowed)
class(1, 'Long Jump',4).
class(2,'High Jump',5).

真不知道怎么做

在 SWI-Prolog 中,nth1(Index, List, Elem) is true when Elem is the Index’th element of List, counting from 1. Alternatively, you can use nth0/3,如果您喜欢从 0 开始计数。两个谓词都在 library(lists) 中定义,它是自动加载的。

示例:

?- nth1(Index, [a,b,c], b).
Index = 2 ;
false.

?- nth1(2, [a,b,c], Elem).
Elem = b.

如果只需要知道元素在列表中第一次出现的索引,也可以使用ISO内置谓词once/1:

示例:

?- once(nth1(Index, [a,b,c], b)).
Index = 2.

?- once(nth1(Index, [a,b,c,b], b)).
Index = 2.

?- nth1(Index, [a,b,c,b], b).
Index = 2 ;
Index = 4.