查询元组列表中的第一个元素并返回另外两个元素的函数

时间:2016-04-16 03:12:33

标签: haskell

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

我是编程新手,经过大量研究后,我想我会从Haskell开始。我发现这个http://learnyouahaskell.com非常有用,但坚持理解和类型注释在模式匹配中起作用。到目前为止,我在语法理解上看到的一致是

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

我可能听起来很幼稚和懒惰,但老老实实地寻找一些快速的突破,所以我可以继续前进。提前谢谢。

2 个答案:

答案 0 :(得分:2)

首先,这里是如何在列表理解中进行模式匹配的:

[(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]

而且,由于这些ID是唯一的,因此您只对第一场比赛感兴趣,因此只需从上述结果中take 1

就个人而言,我更喜欢do符号:

do (a,b,c) <- input
   guard (a == id)
   return (b,c)

答案 1 :(得分:0)

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)]