差不多吧:
prop_leftInverse ((x, y):rest) = undefined
首先, ,你需要在整個模式中使用括號。其次,列表中的第一個元素是一個元組,但列表的其餘部分只是元組列表,而不是元組列表。
如果你看一下簡單的模式匹配的通用列表
head :: [a] -> a
head [] = error "Empty list"
head (x:xs) = x
對這個工程的所有類型a
類型的所有值,或。如果你想要一個特定的類型,如Int
,你可以做
headIsOne :: [Int] -> Bool
headIsOne (1:xs) = True
headIsOne _ = False -- Here the _ matches anything
所以,如果你想匹配一個元組:
addTup :: (Int, Int) -> Int
addTup (x, y) = x + y
我們看到的是模式匹配元組是究竟如何我們在代碼中編寫一個代碼,所以要在列表的開頭匹配一個,我們只需要將第一個元素與特定模式匹配即可。
prop_leftInverse ((x, y):rest) = undefined
列表的其餘部分被分配到rest
(儘管你可以稱它爲任何你想要的)。
又如
如果你想搶得頭兩個元:
myFunc ((x, y):(v, u):rest) = undefined
漲幅前三:
myFunc ((x1, y1):(x2, y2):(x3, y3):rest) = undefined
現在我希望你能看到的模式(得到它?)
這非常詳細,謝謝! –