weglassen Ich bin mit Scala mucking um einige gemeinsame Algorithmen implementieren. Bei dem Versuch, eine Blase Art neu erstellen ich in diese Ausgabe liefWie kann ich dieses Nil Case
Hier ist eine Implementierung einer der inneren Schleife, die den Wert nach oben sprudelt:
def pass(xs:List[Int]):List[Int] = xs match {
case Nil => Nil
case x::Nil => x::Nil
case l::r::xs if(l>r) => r::pass(l::xs)
case l::r::xs => l::pass(r::xs)
}
Mein Problem ist mit Fall Nil => Nil
. Ich verstehe, dass ich brauche, weil ich Nil
auf diese Funktion anwenden könnte. Gibt es eine Möglichkeit, sicherzustellen, dass Nil
nicht als Argument in einer Weise bereitgestellt werden kann, die den Compiler erfüllen würde, damit ich diesen Fall beseitigen kann?
Ah, gut, das war mir nicht bewusst, da ich Scala nicht kenne :-) –
Beachten Sie, dass Sie diese Funktion im Allgemeinen nicht auf 'List [Int]' Werte anwenden können, weil der Compiler normalerweise ist nicht bewusst, ob irgendeine gegebene 'List [Int]' zur Laufzeit leer ist oder nicht (dies erfordert im Allgemeinen die Lösung des Halteproblems). Pattern-Matching ist der Mechanismus, mit dem ein allgemeiner unbekannter 'List [Int]' - Wert zwei verschiedene Zweige durchlaufen kann, abhängig davon, ob er 'Nil' oder ein ':: [Int]' ist.Das heißt, wenn Sie Listen als 'List [Int]' herumreichen, müssen Sie normalerweise jedes Mal, wenn Sie 'pass' aufrufen, ein passendes Muster erstellen. – Ben
Und man kann es nicht einmal so nennen wie 'pass (1 :: 2 :: Nil)' ... –