Was ist der Unterschied zwischen Pattern Matching und Guards?

Ich bin sehr neu in Haskell und der funktionalen Programmierung im Allgemeinen. Meine Frage ist ziemlich grundlegend. Was ist der Unterschied zwischen Pattern Matching und Guards?

Funktion mit pattern-matching

check :: [a] -> String
check [] = "Empty"
check (x:xs) = "Contains Elements"

Funktion mit Wachen

check_ :: [a] -> String
check_ lst
    | length lst < 1 = "Empty"
    | otherwise = "Contains elements"

Für mich sieht es aus wie Pattern Matching und Guards sind grundsätzlich die gleichen. Beide auswerten einer Bedingung, und wenn Sie wahr ist, wird ausgeführt der Ausdruck hakte es. Bin ich richtig in meinem Verständnis?

In diesem Beispiel kann ich wahlweise pattern matching oder den guards, um zu demselben Ergebnis gelangen. Aber etwas sagt mir, ich bin etwas zu verpassen wichtig. Können wir immer ersetzen eine mit dem anderen?

Könnte mir jemand Beispiele nennen, wo pattern-matching ist bevorzugt über Wachen und Umgekehrt?

  • Es muss nicht direkt deine Frage, aber die erste version der Funktion ist wahrscheinlich besser, weil es effizienter ist und die Arbeit wird für unendliche Listen.
  • Pattern-matching wird über die form der Daten, Wachen über den Inhalt.
  • Überprüfen Sie die definition von pattern matching in die Sprache Haskell-Report.
Schreibe einen Kommentar