Wie berechnen Sie den Index des Elements in einer Liste?
Bin ich angefangen zu spielen mit prolog, und mit einem Java-hintergrund, es ist wirklich schwierig für mich, hier ist also eine dumme Frage:
Wie Sie schreiben, eine indexOf-Prädikat zu geben in der Lage den index ein bestimmtes element in einer gegebenen Liste ?
Meine erste Frage ist über das Prädikat die stelligkeit: ich denke, es sollte 3 wie:
indexOf(List,Element, Index) :- ......
Bin ich im Recht ? Kann sein, dass das bereits vorhanden ist, gebaut-in-Bibliotheken, aber ich möchte lernen, wie es zu schreiben. Vielen Dank für Ihre Hilfe.
- Sieht aus wie ein guter Anfang.
- ja, aber ich bin immer verrückt auf dieses kleine Prädikat zu arbeiten !!!
- Dies ist in der Tat eine gute übung ist beim erlernen von prolog. Zur info: das Gebäude Prädikate um dies zu erreichen sind
nth0
undnth1
. (swi-prolog.org/pldoc/...)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie es tun rekursiv: Angenommen, 0-basierten index (andernfalls ändern Sie einfach die 0 mit der 1 auf der ersten Klausel)
Wenn Sie wollen nur, um den ersten Auftritt, könnte man hinzufügen, einen Schnitt (!) um zu vermeiden, backtracking.
member(List, ListOfLists), indexOf(List, Element, Index)
indexOfInListOfLists(ListOfLists, Element, Index):- member(List, ListOfLists), indexOf(List, Element, Index).
Sollte man lieber verwenden, tail-recursion:
Einige Beispiel-Abfragen:
Wenn Sie wollen, um alle Indizes eines Elements in einer Liste, die Sie sollten schreiben ein weiteres Prädikat für die es ohne den cut genannt allIndexesOf oder so etwas.
Ich diese im Nachfolger notation und es ist ziemlich präzise und sauber:
Probe-Ausgänge: