我有这种数据结构,其中元素始终是唯一的:
[[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
。你能帮我解决一下吗?
答案 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
中搜索。