2010-11-23 13 views
2

Ich versuche grundlegende Listenoperationen mit SML durchzuführen.Wie wiederhole ich eine Liste?

Ich möchte jedes Element der Liste extrahieren und String an dieses Element anhängen und es wieder in die Liste einfügen. Beispiel:

List : [A,B,C,D] 
String : A 
Final List: [AA,AB,AC,AD] 

Wie kann ich durch jedes Element in der Liste in SML laufen? Ich kann Strings unter Verwendung ^ anfügen und Listen unter Verwendung @ verketten aber wie extrahiere ich jedes Element von der Liste?

Können wir auch etwas wie map oder arrays verwenden, um diese Listenwerte zu speichern und sie an verschiedene Funktionen in SML weiterzugeben?

Ich konnte nur einige vage Informationen über die Karte und keine definitive Informationen darüber finden, wie wir es verwenden können.

Antwort

1

zwei einfache Möglichkeiten, dies zu tun:

- fun addstring (x::xs) a = (a^x) :: addstring xs a 
= | addstring []  a = [] 
= ; 
val addstring = fn : string list -> string -> string list 
- addstring ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

Die obige Musterabgleich verwendet die Liste zu zerstören, führt die Operation, baut dann die Liste wieder, Rekursion, wie es geht.

- fun addstring2 xs a = map (fn x => a^x) xs; 
val addstring2 = fn : string list -> string -> string list 

- addstring2 ["A", "B", "C", "D"] "A"; 
val it = ["AA","AB","AC","AD"] : string list 

Dies ist ein gutes Stück einfacher (wenn auch vielleicht ein klein bisschen härter als die expliziten Fälle in addstring zu lesen.), Aber es zeigt, wie Karte verwendet wird - eine Funktion angeben, die jedes Element von der Quelle abbildet Geben Sie der Zieldomäne eine Liste mit Elementen in der Quelldomäne und eine Liste in der Zieldomäne zurück.

natürlich, keiner von diesen tun in-Place-Aktualisierung der Liste, sie geben die neue Liste zurück.

+0

Können Sie mir sagen, ob ich diese Liste tatsächlich weitergeben könnte? Wäre es in dem obigen Fall, der die Liste ["AA", "AB", "AC"] enthält, "a"? with pass around Ich meine, wenn eine Funktion add die addString-Funktion aufruft, wird der Wert a an die add-Funktion übergeben ?? – JJunior

Verwandte Themen