所以我有一个像这样定义的元组列表:
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)
答案 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
将获得该列表中的第一个Int
,snd $ last b
将获得最后一个。
你如何比较它们取决于你。