我开始玩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)