Prolog-返回元素的索引

时间:2012-03-24 01:35:22

标签: list prolog

我已经因为这个问题难倒了3个小时,我需要找到(A,B,C)的索引,其中A是列表BC的索引位置(如果不在列表中,则为-1)。这是我到目前为止所做的,

indexof(A,0,[A|_]).
indexof(A,B,[_|C]):- Y is B-1, indexof(A,Y,C).

它在索引点B给出了元素,这不是我想要的。

indexof(A,1,[1]).

应该返回A=0;A=-1.

我在Prolog很可怕,我一生都在做Java,所以也请提供解释。

2 个答案:

答案 0 :(得分:3)

你可以使用内置的谓词nth1 / 3,它可以直接用来实现你想要的。

indexof(Index, Item, List):-
  nth1(Index, List, Item).
indexof(-1, _, _).

[OP改写后的问题编辑]

第一个子句枚举列表中项目的索引,第二个子句只是将每个OP要求的索引统一为-1。

答案 1 :(得分:1)

尝试以下

indexof(A,0,[A|_]).
indexof(_,-1,[]).
indexof(A,D,[_|C]):- indexof(A,B,C), B > -1, D is B+1. 
indexof(A,D,[_|C]):- indexof(A,B,C), B = -1, D is B.

你需要[]的基本情况和-1的增量逻辑