我有这样的数据结构的列表,其中的元素始终是唯一的:查找元素的索引中列出
[[a,b,c], [d,e,f], [y,z]]
现在,我想编写一个程序来得到一个元素的索引,说我有:
indexOf([[a,b,c], [d,e,f], [y,z]], a, H)
和H
是0
。或者:
indexOf([[a,b,c], [d,e,f], [y,z]], f, H)
和H
是2
。
这是我有:
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
所有的时间。你能给我任何线索解决它吗?
你知道什么失败吗?这两个谓词中的哪一个是它?你知道'nth0/3'吗?如果你使用的是Prolog实现,你可以用它来代替你的'indexOf_single/3'。它也有可能是'nnth/3';然后使用'n(Index1,List,Element),succ(Index,Index1)'。 – 2016-11-30 10:31:06