list - 通过列表列表中的索引获取元素/元素的索引

标签 list loops indexing prolog

如何在列表列表上实现类似于 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/

相关文章:

c# - 从 C# 代码内部访问 F# List<List<>>

python - 如何使用 matplotlib 绘制元组列表?

python - 卡在 Python 3 中的错误(异常、循环)

mysql 索引创建问题

c - 如何根据列表表示图的边?

.net - HashSet 与 List 性能对比

loops - 创建循环以打开和导出报告

c - Do..while 内部开关

database - Oracle 数据库 : Index-Organized Table with NULL Values (in Multiple-Column Primary Key)

android - AOSP/Android 源码索引工具