查找列表列表中的元素索引

时间:2016-11-30 10:24:49

标签: prolog

我有这种数据结构,其中元素始终是唯一的:

[[a,b,c], [d,e,f], [y,z]]

现在,我想编写一个过程来获取元素的索引,比如我有:

indexOf([[a,b,c], [d,e,f], [y,z]], a, H) 

H0。或者:

indexOf([[a,b,c], [d,e,f], [y,z]], f, H) 

H2

这就是我所拥有的:

indexOf_single([X|_],X,0).
indexOf_single([_|T],X,H) :- indexOf_single(T,X,H1), H is H1 + 1.

indexOf([T],X,H) :- indexOf_single(T,X,H).
indexOf([Head|Tail],X,H) :- indexOf_single(Head,X,H),indexOf(Tail,X,H).

但我一直都在false。你能帮我解决一下吗?

1 个答案:

答案 0 :(得分:2)

尝试

indexOf([Head|_],X,H) :- indexOf_single(Head,X,H).
indexOf([_|Tail],X,H) :- indexOf(Tail,X,H).

我在indexOf/3中看到两个错误。

(1)在你的第二个条款中

indexOf([Head|Tail],X,H) :- indexOf_single(Head,X,H),indexOf(Tail,X,H).

您要求在H中的Head(通过indexOf_single/3找到Tail。当“元素永远是独一无二的”时,这是不可能的。

(2)在你的第一个条款中

indexOf([T],X,H) :- indexOf_single(T,X,H).

如果T是第一个参数的最后一个子列表,则只在T 中搜索