Wie finde ich den index eines Elements in einer Liste im Schläger?
Ist dies trivial umzusetzen, natürlich, aber ich habe das Gefühl es ist schon etwas gebaut, um Schläger, der dies tut. Bin ich richtig, dass intuition, und wenn ja, in welcher Funktion?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seltsam, gibt es nicht eine built-in-Verfahren in Schläger-für die Suche nach den 0-basierten index eines Elements in eine Liste (die entgegengesetzte Verfahren hat existieren, es heißt
list-ref
). Jedoch, es ist nicht schwer zu implementieren, effizient:Aber es ist ein ähnliches Verfahren in
srfi/1
es heißtlist-index
und Sie erhalten die gewünschte Wirkung durch die übergabe der richtigen Parameter:UPDATE
Als der Schläger 6.7,
index von
ist jetzt Teil der standard-Bibliothek. Genießen Sie!list-index
. Siehe meine aktualisierte Antwort.curry
, herzlichen Glückwunsch. 🙂 (Ich in der Regel neigen dazu, zu verwendencut
für ähnliche Situationen, wo der wahre currying ist nicht erforderlich, da können Sie Argumente in der Mitte, wie dieser.)acc
ist ein ziemlich schlechter name hier, da es nicht wirklich sammeln nichts.let
Bindungen, aber ich in der Regel halten Sie mich...filter
gibt eine Liste der Elemente, die wir interessiert sind, in einem einzigen element. Und außerdem, es gibt keine Möglichkeit anzugeben, der index zurückgegeben werden, wenn Sie mitfilter
. Einfach ausgedrückt, es ist nicht das richtige Werkzeug für den jobcut
.cut
engagiert, was die Verknüpfung zu realen code, der es verwendet. Es war keine Dokumentation zur Verfügung zu stellen Menschen, die nicht schon wissen, wascut
war.index-of
ist jetzt Teil der standard-Bibliothek! Dies könnte würdig sein, eines zu Bearbeiten ist (obwohl diese Antwort funktioniert perfekt in Ordnung).Hier eine sehr einfache Umsetzung:
Und ja, so etwas sollte Hinzugefügt werden, um die standard-Bibliothek, aber es ist nur ein wenig schwierig zu tun, damit niemand bekam es noch.
Beachten Sie jedoch, dass es eine Funktion, die nur sehr selten nützlich-denn Listen sind in der Regel als eine Sequenz, die dekonstruiert werden nur mit der ersten/rest idiom, anstatt direkt den Zugriff auf Elemente. Mehr als, dass, wenn Sie eine Verwendung für Sie und du bist ein Neuling, dann ist meine erste Vermutung wird sein, dass Sie missbräuchlich zu Listen. Angesichts der Tatsache, dass die addition eine solche Funktion ist wahrscheinlich Reise solche newbies, indem es mehr zugänglich. (Aber es wird noch Hinzugefügt werden, irgendwann.)
Kann man auch mit einem built-in-Funktion '
member
' gibt eine Teilliste, beginnend mit der gewünschten Position oder#f
wenn Element nicht vorhanden in der Liste. Folgenden vergleicht die Längen der original-Liste und die Teilliste zurückgegeben Mitglied:Für viele Situationen, man möchte Indizes der alle vorkommen des Elements in der Liste. Kann man sich eine Liste aller Indizes wie folgt:
For/list
können auch verwendet werden, für diese:Testen:
Ausgabe:
-1
Sache, um zu signalisieren, dass kein index vorhanden ist. Es ist viel übersichtlicher und einfacher, wenn Sie zurück#false
in diesen Fällen, so dass die idiomatische Weise, es zu tun