使用haskell从元组列表中提取元组

时间:2012-02-07 17:05:47

标签: list haskell functional-programming tuples

我有这个派生数据类型AcInfo,它由以下用户创建的数据类型组成 [(AcNo, Name, City, Amnt)] (所有字符串除了Amnt之外是Int)我想要的是通过检查AcNo从以下列表中获取元组。

我做了一点宣言,但我发现很难弄清楚接下来要做什么。声明:

accountDetails :: AcInfo -> AcNo -> [Name, City, Amnt]
accountDetails dbase number 

列表理解的使用是否有用?此外,寻求解决方案的好方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:3)

你可以很容易地用列表推导来做到这一点:

locateAcct :: AcNo -> [(AcNo, Name, City, Amnt)] -> (AcNo, Name, City, Amnt)
locateAcct account db = head [ tup | tup@(ac, _, _, _) <- db, ac == account ]

当然,通过使用head,我们可以打开失败的可能性。也许更好的方法是使用类似safe library的headMay版本,如果列表为空则返回Nothing:

locateAcct :: AcNo -> [(AcNo, Name, City, Amnt)] -> Maybe (AcNo, Name, City, Amnt)
locateAcct account db = headMay [ tup | tup@(ac, _, _, _) <- db, ac == account ]

现在,如果该帐户不存在,您将获得Nothing而不是模式匹配失败。

答案 1 :(得分:1)

find ((==) target . fst4)http://zvon.org/other/haskell/Outputlist/find_f.html

其中fst4fst的版本,需要4个元组。不确定它是否在库中,但很容易编写。