Haskell:在元组列表中找到第一个元素x的元组

时间:2015-10-17 15:24:39

标签: haskell tuples

请允许我解释一下我的问题是否不清楚。我们说我有tuples :: [(a, Int)]。我使用zip创建了这个。现在,我想为Int元素找到相应的a值。我试图弄明白我是怎么做的。

f :: [(a, Int)] -> a -> Int

以上是我需要的功能类型。

或者如何在ghci中使用它:

let tuples = zip ['a','b','c'] [1..]

f tuples 'a'

返回:1

2 个答案:

答案 0 :(得分:3)

有一个

lookup :: Eq a => a -> [(a, b)] -> Maybe b
前言中的

。它返回Maybe,因为您正在查找的项目可能不在列表中。

但你没有要求安全,而且参数顺序与你提出的要求不同,所以它没有回答你的问题完全

答案 1 :(得分:1)

正如另一个答案所说,您可能希望使用lookup :: Eq a => a -> [(a, b)] -> Maybe bsource-code)。您可以像lookup key = fmap snd . safeHead . filter ((== key) . fst)一样以无点样式实现它。

要在列表中没有密钥时放弃安全性,只需将safeHead :: [a] -> Maybe ahead :: [a] -> a交换,然后只需flip :: (a -> b -> c) -> b -> a -> c更改参数顺序。

因此,为了找到您的初始规范,我们可以:

myLookup :: Eq a => [(a, b)] -> a -> b
myLookup = flip myLookup'
    where myLookup' key = snd . head . filter ((== key) . fst)