Ich schrieb meine eigene rekursive Definition eines foldLeft
und ich würde es mit dieser Funktion joinTerminateLeft
verwenden, die eine Liste von Zeichenfolgen und einem Terminator und erstellt eine neue Zeichenfolge mit denen Strings alle durch den Terminator getrennt.Scala mit foldLeft zum Einfügen Terminator zwischen der Liste der Strings
Zum Beispiel List("a", "b", "c", "d")
mit Terminator ;
a;b;c;d;
hier am Ende als würde mein foldLeft
was ich denke, ist in Ordnung, aber meine terminateLeft
nicht aus irgendeinem Grunde arbeitet, jede Idee?
def foldLeft [A,B] (xs:List[A], e:B, f:(B,A)=>B) : B = {
def auxFoldLeft(xs: List[A], e: B) : B = {
xs match {
case Nil => e
case x::xs => auxFoldLeft(xs, f(e, x))
}
}
auxFoldLeft(xs, e)
}
def joinTerminateLeft (xs : List[String], term : String) : String = {
def f(s: String, s2: String) : String = s + s2
xs match {
case Nil => ""
case x::xs => x + foldLeft(xs, term, f)
}
}
Wenn ich laufe joinTerminateLeft
mit a, b, c, d es aus irgendeinem Grunde nach B stoppt und gibt die Saiten c, d, aber nicht mit dem Terminator.
Das ist also eine Praxis? Denn 'mkString ("; ")' funktioniert einwandfrei. – Psidom
Ja, es ist für die Praxis. Ich muss joinTerminateLeft mit meinem foldLeft durchführen, ohne zusätzliche Methoden neben der String-Verkettung, von der ich annehme, dass es notwendig ist. – mocode9
Plus Ich glaube nicht, dass 'foldLeft' die richtige Funktion dafür ist, denn hier brauchst du keinen Anfangswert, um die Liste als String zu verbinden. Eine Funktion mit ähnlicher Signatur von "reduce" könnte besser geeignet sein. – Psidom