列表中的下一个元素

时间:2015-11-04 18:18:48

标签: list haskell list-comprehension

我在Haskell中有一个函数,它返回卡片的后继者。我知道如何使用列表理解来访问该卡,但不太确定如何获得下一张卡,所以pos + 1。这是我的代码:

pCard::Card->Deck->Card
pCard (K,C) _ = (A,S) --exception for last card
pCard crd pck = head [p|(pos,p)<-(zip [0..51] pck),crd==p]

2 个答案:

答案 0 :(得分:3)

提示:使用dropWhile (/= crd) pck从开头删除所有卡片,直到找到您的卡片。然后,剩余的第一张卡片是crd。之后的那个是你想要的那个。

但是,如果pck标准订单中的牌组,则在整个牌组上循环以找到下一张牌似乎效率很低。

答案 1 :(得分:3)

您可以让Card类型通过deriving Enum实例化Enum类型类,然后使用succ函数获取后续卡。 请注意,将卡组的最后一张卡片传递给succ会导致运行时错误,但看起来您的第一个pCard功能正文会考虑到这一点。

我刚注意到你的Card类型似乎是一个元组;我猜您使用Card关键字定义了type?在这种情况下,如果不使用GHC扩展,我上面提出的解决方案将无效。