ich diese Datenstruktur haben, wo die Elemente sind immer einzigartig:Finden der Index des Elements in einer Liste von Listen
[[a,b,c], [d,e,f], [y,z]]
Nun, ich möchte ein Verfahren schreiben, den Index eines Elements zu erhalten, sage ich haben:
indexOf([[a,b,c], [d,e,f], [y,z]], a, H)
und H
ist 0
. Oder:
indexOf([[a,b,c], [d,e,f], [y,z]], f, H)
und H
ist 2
.
Das ist, was ich habe:
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).
Aber ich bin immer false
die ganze Zeit. Könnten Sie mir bitte Hinweise geben, um es zu lösen?
Wissen Sie, was scheitert? Welches der beiden Prädikate ist das? Und kennst du 'nth0/3'? Sie können es verwenden, um Ihr 'indexOf_single/3' zu ersetzen, wenn Sie eine Prolog-Implementierung verwenden, die es enthält. Es ist auch möglich, dass es "nth/3" hat; Verwenden Sie dann 'nth (Index1, Liste, Element), succ (Index, Index1)'. –