Das ist natürlich ein triviales Werkzeug, aber ich glaube, dass Racket dafür etwas eingebaut hat. Bin ich in dieser Intuition richtig, und wenn ja, was ist Funktion?
Seltsamerweise gibt es in Racket keine eingebaute Prozedur, um den 0-basierten Index eines Elements in einer Liste zu finden (die umgekehrte Prozedur existiert , sie heißt list-ref
). Es ist jedoch nicht schwer, effizient zu implementieren:
Aber ist eine ähnliche Prozedur in srfi/1
, heißt list-index
und Sie können den gewünschten Effekt erzielen, indem Sie die richtigen Parameter übergeben:
AKTUALISIEREN
Ab Racket 6.7, index-of
ist jetzt Teil der Standardbibliothek. Viel Spaß!
Hier ist eine sehr einfache Implementierung:
%Vor%Und ja, so etwas sollte der Standard-Bibliothek hinzugefügt werden, aber es ist nur ein wenig schwierig, so zu tun, dass noch niemand da ist.
Beachten Sie jedoch, dass es sich um eine Funktion handelt, die sehr selten nützlich ist, da Listen normalerweise als eine Sequenz verwendet werden, die nur mit dem ersten / Rest-Idiom dekonstruiert wird, anstatt direkt auf Elemente zuzugreifen. Mehr als das, wenn Sie einen Nutzen dafür haben und Sie ein Neuling sind, dann wird meine erste Vermutung sein, dass Sie Listen missbrauchen. Angesichts der Tatsache, dass die Hinzufügung einer solchen Funktion solche Neuankömmlinge wahrscheinlich durch zugänglicheres Verhalten stört. (Aber es wird noch hinzugefügt werden.)
Man kann auch eine eingebaute Funktion ' member
' verwenden, die eine Unterliste gibt, die mit dem erforderlichen Element beginnt, oder #f
, falls das Element in der Liste nicht existiert. Im Folgenden werden die Längen der ursprünglichen Liste und der von member zurückgegebenen Teilliste verglichen:
Für viele Situationen kann man Indizes aller Vorkommen von Elementen in der Liste wünschen. Man kann eine Liste aller Indizes wie folgt erhalten:
%Vor% For/list
kann auch dafür verwendet werden:
Testen:
%Vor%Ausgabe:
%Vor%