【发布时间】:2013-12-03 16:46:01
【问题描述】:
如何在列表列表上实现类似于nth0/3 谓词的功能?
我希望能够知道列表列表中元素的索引是什么,但只对内部列表索引感兴趣。我的意思是说我有以下谓词indexOf([[a,b,c], [d,e,f], [g,h]], d, Index),它返回Index=0,因为d 是内部列表的第一个元素。
indexOf([[a,b,c], [d,e,f], [g,h]], c, Index) 应该返回 Index=2,因为它是内部列表的第三个元素。
到目前为止,我所做的如下:
iterateOuter([]).
iterateOuter([[H|T]|LIST], Elem,Idx):-indexOf([H|T],Elem, Idx2),(Idx is Idx2;iterateOuter(LIST, Elem,Idx)).
indexOf([_|Tail], Element, Index):-indexOf(Tail, Element, Index1), Index is Index1+1.
indexOf([Element|_], Element, 0).
如果我调用iterateOuter([[a,b,c],[r,t,o]],c,Ind).
它会给我Ind = 2 这很好,但如果我说:
iterateOuter([[a,b,c],[r,t,o]],r,Ind).
它只会给我错误,因为它只在第一个内部列表上给出结果。
【问题讨论】:
-
如果元素在多个内部列表中怎么办?
-
好点,对不起,我忘了添加在这种情况下,我想要 2 个与 nth0 相同的结果和一个简单的列表。
-
@user3009573 出于好奇,您想到的应用程序是什么,使得子列表中元素的索引很重要,但您不需要知道元素在哪个子列表中?
标签: list loops indexing prolog