SML: get index des Elements in der Liste

Ich bin neu in der SML und ich bin versucht, um den index eines Elements in einer Liste. Ich weiß, dass mit Liste.N-TEN geben mir den Wert eines Elements an index-position, aber ich will den index-Wert. Es kann sogar eine eingebaute Funktion, die ich nicht kenne. In meinem Fall, die Liste enthält keine Duplikate, so dass, wenn das Element in der Liste, die ich, um den index, wenn er es nicht zurückgibt, ~1. Hier ist der code, den ich bisher haben. Es funktioniert, aber ich glaube nicht, es ist sehr sauber:

val L=[1,2,3,4,5];
val m=length L-1;
fun Index(item, m, L)=if m<0 then ~1 else
    if List.nth(L, m)=item then m else Index(item,m-1,L);
  • Was genau ist Ihre Frage? Ich glaube, es ist keine standard-Funktion, die dies explizit, zumindest nicht in der Liste Struktur. Wie für die Reinigung von code, ich würde vorschlagen, 1) mit Option oder eine Ausnahme anstatt ~1, 2) parameter ausblenden m durch die Verpackung die Funktion einer äußeren Funktion, 3) mit der Mustererkennung werden auf m zur Beseitigung einer bedingten (if m < 0 ...)
  • Danke für die Tipps. Die Frage war eigentlich, "Was ist der beste Weg, dies zu tun?". Es wäre schön, nicht zu pass m in der Funktion, da kommt es auf die Länge von L sowieso, aber wie gesagt ich bin neu in SML nicht sicher, wie die beiden zu verbinden. Der Grund für den code; ich habe zwei Listen von verschiedenen Arten, die miteinander verwandt sind. Das update eines Elements in der Liste benötigt man das update für ein Element in der gleichen position in der Liste zwei. Ich glaube, dass die Struktur der Liste könnte so etwas mit "zip", aber das ist eine Arbeit für jetzt.
InformationsquelleAutor One Freak | 2013-07-24
Schreibe einen Kommentar