Haskell 查询元组列表中的第一个元素并返回其他两个元素的函数

Haskell 查询元组列表中的第一个元素并返回其他两个元素的函数,haskell,Haskell,我希望有一个元组列表[(a,b,c)…],其中a是字符串,b和c是Num。我将有一个函数,可能是模式匹配理解,它将只搜索列表中任何元组中的第一个元素(唯一ID),如果找到匹配项,该函数将返回元组中剩余的两个元素 我是编程新手,在做了很多研究之后,我想我应该从Haskell开始。我发现这一点从一开始就非常有用,但一直停留在理解和类型注释在模式匹配中的作用上。到目前为止,我在语法理解上看到的一致性是 { Manipulate Set B, but mind the predicate | Trim

我希望有一个元组列表[(a,b,c)…],其中a是字符串,b和c是Num。我将有一个函数,可能是模式匹配理解,它将只搜索列表中任何元组中的第一个元素(唯一ID),如果找到匹配项,该函数将返回元组中剩余的两个元素

我是编程新手,在做了很多研究之后,我想我应该从Haskell开始。我发现这一点从一开始就非常有用,但一直停留在理解和类型注释在模式匹配中的作用上。到目前为止,我在语法理解上看到的一致性是

{ Manipulate Set B, but mind the predicate | Trim it down further to make Set B | Select set A, Predicate }

我可能听起来很幼稚和懒惰,但老实说,我正在寻找一些快速的突破,这样我就可以继续前进。提前感谢。

首先,以下是如何在列表理解中进行模式匹配:

[(b,c) | (a,b,c) <- input]
-- (b,c) constructs your results
-- (a,b,c) is the pattern matching

谢谢我现在真的明白了,当你说“构建你的结果”与操纵相比。两者听起来可能相同,但一个是严格的,另一个是松散的,当谈到如何看待它。有警卫的整洁的人:)还没到呢!我可能错了,因为我不知道问题的完整描述,但我感觉您在这里使用了错误的数据结构<代码>数据。地图通常是保存由唯一键指向的对象的更好选择。此外,自定义数据类型通常比通用元组更好。
[(b,c) | (a,b,c) <- input, a == id]
do (a,b,c) <- input
   guard (a == id)
   return (b,c)
getMtach [] _ = []
getMtach ((a, b, c):xs) key
    | (a == key) = (b, c) : getMtach xs key
    | otherwise = getMtach xs key

Main> getMtach [(1, "abc", 12.3), (2, "asg", 4.5), (1, "xyz", 123)] 1
[("abc",12.3),("xyz",123.0)]
*Main> 
*Main> getMtach [(1, "abc", 12.3), (2, "asg", 4.5), (1, "xyz", 123)] 2
[("asg",4.5)]