[英]Haskell pattern matching a list of tuples
正如帖子標題所說,我在Haskell中定義了以下函數:
prop_LeftInverse :: (Eq a, Eq b) => [(a,b)] -> Bool
prop_LeftInverse (x,y):(xs,ys) = undefined
應該將元組列表作為輸入。 我parse error in pattern
遇到了parse error in pattern
但我無法弄清楚它是什么,也沒有找到有關此特定情況的任何信息......
幾乎是對的:
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
到現在為止,我希望你能看到模式(得到它?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.