2012-03-24 23 views
2

Ich habe für 3 Stunden nun auf dieses Problem ratlos sind, muss ich den Index (A,B,C) finden, wo A die Indexpositionen von B in der Liste ist C (oder -1, wenn nicht in der Liste) . Das ist, was ich habe, so weit,Prolog--Return-Index eines Elements

indexof(A,0,[A|_]). 
indexof(A,B,[_|C]):- Y is B-1, indexof(A,Y,C). 

es gibt das Element am Index-Punkt B, das ist nicht das, was ich will.

indexof(A,1,[1]). 

sollte A=0;A=-1.

kehre ich schrecklich bin Prolog habe ich Java mein ganzes Leben getan, so auch Erklärungen zu erläutern.

+0

Können Sie ein Beispiel Aufruf mit Werten für 'B' geben und ' C' und der erwartete Wert von 'A'? (Habe ich deine Frage richtig verstanden?) – sarnold

+0

Es tut mir leid, ich habe Schwierigkeiten, meine Frage zu formulieren, mein Gehirn ist gebraten. Grundsätzlich, Index von (A, 1, [1]). sollte A = 0 zurückgeben, A = -1. Wie Sie an meinem hochentwickelten Code * Sarkasmus * erkennen können, bin ich völlig verwirrt darüber, wie man das in dieser Sprache macht. – MellowFellow

+0

Kein Scherz, Prolog braucht etwas Zeit, um sich daran zu gewöhnen. (Ich habe es sicher noch nicht bekommen.) – sarnold

Antwort

3

Sie können das integrierte Prädikat nth1/3 verwenden, das direkt verwendet werden kann, um zu erreichen, was Sie wollen.

indexof(Index, Item, List):- 
    nth1(Index, List, Item). 
indexof(-1, _, _). 

[bearbeiten nach OP Frage umformuliert]

Die erste Klausel aufzählt den Index des Elements in der Liste, und die zweite Klausel vereint nur Index mit -1 pro OP Anforderung.

+0

Ich habe versucht herauszufinden, was genau nth1/3 macht, kannst du mir bitte helfen zu verstehen? Danke für die Hilfe! – MellowFellow

+0

Überprüfen Sie diese [http://stackoverflow.com/questions/4237697/simple-nth1-predicate-in-prolog] Frage, die beschreibt, wie 'nth1/3' funktioniert. – gusbro

+0

Danke Mann! Ich denke endlich, dass ich verstehe, zumindest verstehe ich diesen kleinen Teil. – MellowFellow

1

Versuchen Sie, die folgende

indexof(A,0,[A|_]). 
indexof(_,-1,[]). 
indexof(A,D,[_|C]):- indexof(A,B,C), B > -1, D is B+1. 
indexof(A,D,[_|C]):- indexof(A,B,C), B = -1, D is B. 

Sie benötigt, um die Basis zu haben, falls für [] und die Schritt Logik für -1 als auch

Verwandte Themen