我已经因为这个问题难倒了3个小时,我需要找到(A,B,C)
的索引,其中A
是列表B
中C
的索引位置(如果不在列表中,则为-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,所以也请提供解释。
答案 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的增量逻辑