Fast rechts:
prop_leftInverse ((x, y):rest) = undefined
Zu allererst , benötigen Sie Klammern um das gesamte Muster. Zweitens ist das erste Element in der Liste ein Tupel, aber der Rest der Liste ist nur eine Liste von Tupeln, kein Tupel von Listen.
Wenn Sie einfaches Muster sehen Matching auf eine generische Liste
head :: [a] -> a
head [] = error "Empty list"
head (x:xs) = x
Dies funktioniert alle Werte vom Typ a
, oder alle Arten. Wenn Sie einen bestimmten Typ, wie Int
wollen, könnten Sie tun
headIsOne :: [Int] -> Bool
headIsOne (1:xs) = True
headIsOne _ = False -- Here the _ matches anything
Also, wenn Sie ein Tupel passen wollen:
addTup :: (Int, Int) -> Int
addTup (x, y) = x + y
wir sehen, dass das Muster ein Tupel passen genau wie wir schreiben eins in Code, um eins am Anfang der Liste zu finden, müssen wir nur das erste Element mit einem bestimmten Muster abgleichen.
prop_leftInverse ((x, y):rest) = undefined
Der Rest der Liste zu rest
zugewiesen wird (obwohl man es so nennen kann, was Sie wollen).
Ein weiteres Beispiel
Wenn Sie die ersten beiden Tupeln greifen wollte:
myFunc ((x, y):(v, u):rest) = undefined
Oder die ersten drei:
myFunc ((x1, y1):(x2, y2):(x3, y3):rest) = undefined
Inzwischen hoffe ich, Sie können Sehen Sie das Muster (bekommen Sie es?)
Das war sehr detailliert, danke! –