如何计算列表中元素的索引?

Man*_*lva 9 prolog

我开始玩prolog,并且在Java背景下这对我来说真的很难,所以这里有一个愚蠢的问题:

你将如何编写一个indexOf谓词,能够给出给定列表中给定元素的索引?

我的第一个问题是关于谓词arity:我想它应该是3,例如:

indexOf(List,Element, Index) :- ......
Run Code Online (Sandbox Code Playgroud)

我对吗 ?可能这已经存在于内置库中,但我想学习如何编写它.谢谢你的帮助.

gus*_*bro 11

你可以递归地执行:假设从0开始的索引(否则只需在第一个子句中将0更改为1)

indexOf([Element|_], Element, 0). % We found the element
indexOf([_|Tail], Element, Index):-
  indexOf(Tail, Element, Index1), % Check in the tail of the list
  Index is Index1+1.  % and increment the resulting index
Run Code Online (Sandbox Code Playgroud)

如果您只想找到第一个外观,可以添加一个剪切(!)以避免回溯.

indexOf([Element|_], Element, 0):- !.
indexOf([_|Tail], Element, Index):-
  indexOf(Tail, Element, Index1),
  !,
  Index is Index1+1.
Run Code Online (Sandbox Code Playgroud)