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

List 使用haskell从元组列表中提取元组,list,haskell,functional-programming,tuples,List,Haskell,Functional Programming,Tuples,我有一个派生的数据类型AcInfo,它由以下用户创建的数据类型组成 [(AcNo,Name,City,Amnt)] (除了Amnt是一个Int之外,所有的都是字符串)我想要的是通过检查AcNo从下面的列表中得到一个元组 我做了声明,并且做了进一步的阐述,但我发现很难想出下一步该做什么。宣言: accountDetails :: AcInfo -> AcNo -> [Name, City, Amnt] accountDetails dbase number 使用列表理解是否有用?此

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

我做了声明,并且做了进一步的阐述,但我发现很难想出下一步该做什么。宣言:

accountDetails :: AcInfo -> AcNo -> [Name, City, Amnt]
accountDetails dbase number 
使用列表理解是否有用?此外,寻求解决方案的好方法是什么

提前谢谢

查找(==)target.fst4)

其中,
fst4
是采用4元组的
fst
版本。不确定它是否在库中,但它很容易编写

查找(==)target.fst4)


其中,
fst4
是采用4元组的
fst
版本。不确定它是否在库中,但它很容易编写

您可以很容易地通过列表理解来完成此操作:

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

现在,如果该帐户不存在,那么除了模式匹配失败之外,您将一无所获。

您可以非常轻松地使用列表理解来实现这一点:

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

现在,如果该帐户不存在,您将得到一个模式匹配失败的结果。

这不应该是
AcNo->[(AcNo,Name,City,Amnt)]->(AcNo,Name,City,Amnt)
来提取一个匹配
AcNo
的元组吗?这是我的类型减速类型AcNo=String;类型名称=字符串;类型City=String;类型Amnt=Int;键入AcInfo=[(AcNo,Name,City,Amnt)]当您有一个包含2个以上元素的元组时,您可能应该创建一个自定义数据类型来表示该信息分组<代码>数据AcRecord=AcRecord{acNo,name,city::String,amnt::Int}。如果您还不习惯,请熟悉。这不应该是
AcNo->[(AcNo,Name,City,Amnt)]->(AcNo,Name,City,Amnt)
来提取与
AcNo
匹配的元组吗?这是我的类型减速类型AcNo=String;类型名称=字符串;类型City=String;类型Amnt=Int;键入AcInfo=[(AcNo,Name,City,Amnt)]当您有一个包含2个以上元素的元组时,您可能应该创建一个自定义数据类型来表示该信息分组<代码>数据AcRecord=AcRecord{acNo,name,city::String,amnt::Int}。如果您还不习惯,请熟悉。
headMay
也可以作为
Data在标准库中提供。Maybe.listToMaybe
headMay
也可以作为
Data.Maybe.listToMaybe
在标准库中提供。