我想有元组列表[(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 }
我可能听起来很幼稚和懒惰,但老老实实地寻找一些快速的突破,所以我可以继续前进。提前谢谢。
答案 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)]