如何在列表列表上实现类似于 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)。
它只会给我错误,因为它只在第一个内部列表上给出结果。
最佳答案
如果您已经拥有 nth0/3
,那么您就拥有了所需的一切:
?- Xss = [[a,b,c],[r,t,o]], nth0(I, Xss, Xs), nth0(J, Xs, c).
Xss = ["abc","rto"], I = 0, Xs = "abc", J = 2
; false.
?- Xss = [[a,b,c],[r,t,o]], nth0(I, Xss, Xs), nth0(J, Xs, r).
Xss = ["abc","rto"], I = 1, Xs = "rto", J = 0
; false.
关于list - 通过列表列表中的索引获取元素/元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083285/