簡體   English   中英

Haskell模式匹配元組列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM