从Haskell中的元组列表中获取元素

时间:2014-10-22 12:24:02

标签: list haskell tuples

所以我有一个像这样定义的元组列表:

type Domino = (Int,Int)
data End =  L|R  
type Board = [Domino]
d :: Domino
d= (4,5)
b :: Board
b= [(1,3),(3,3),(3,4)]

在我的功能中,我需要能够获得董事会的第一部分。因此,例如我可以在董事会中将多米诺骨牌(1,3)作为一个元组,但我一直试图从中得到整数,并且只是失败了。我需要能够比较整数值。我的问题是你如何在一个列表中获取元组的第一部分,因为我所做的一切和搜索都是失败的。抱歉,如果这很简单,我是haskell的新手。这是我的功能代码,很明显有一堆错误

goesP :: Domino->Board->End-> Bool
goesP _ []_ = True
goesP dom bor L = (if head bor fst  == fst dom then True else if last bor == snd then True else False)

3 个答案:

答案 0 :(得分:2)

这样简单
goesP :: Domino -> Board -> End -> Bool
goesP _ [] _ = True
goesP _ ((a,b):doms) _ = a

将起作用,因为您可以对列表为空的模式匹配,然后成为列表其余部分的一对,并从该对中提取第一个元素。

我不确定你在那里尝试使用End类型,但我在我的例子中将它留在那里(虽然我对它没有任何作用)。

答案 1 :(得分:0)

你可能知道或者可能不知道fst和snd只适用于2元素元组,所以对你来说应该足够了:

fst (a,b) = a

你也可以自己写:

get3th (_,_,a,_,_,_,_,_,_,_) = a

如您所见,您可能想要定义自己的类型。

答案 2 :(得分:0)

从你的问题来看,你看起来并不感兴趣于广义功能,所以这些都可行:

fst $ head b将获得该列表中的第一个Intsnd $ last b将获得最后一个。

你如何比较它们取决于你。