如何在haskell中获得一系列卡片

时间:2015-12-02 15:56:33

标签: list haskell list-comprehension

如何在haskel中获取一系列有序卡片,例如,如果我有这个序列

findSeq [(SIX,H),(SEVEN,H),(EIGHT,C),(NINE,H)]

我正在使用具有显式模式的函数,该函数也返回单个卡。我知道使用过滤器,但我想不出这样做的方法:D我想显示类似`

的内容
[(SIX,H),(SEVEN,H)]

更新:我现在有了这个

findSeq::[Card]->[Card]
findSeq [] = []
findSeq (h:t)
|null t = [h]
|Just h==(pCard (head t) pack)=h:findSeq t
|otherwise=[h]

1 个答案:

答案 0 :(得分:3)

请注意zip cards (tails cards)如何为您提供列表cards的连续卡片组列表。

现在您只需要从此列表中takeWhile,比较您的值和套装:

findSeq cards = takeWhile sameCards $ zip cards (tails cards) where
  sameCards (value1, suit1) (value2, suit2) = 
     suit1 == suit2 & value1 `precedes` value2

我想你已经定义了precedes这样的函数。

注意:我目前没有Haskell编译器;代码未经过试验。