列表中的下一个元素

Next element in a list

我在Haskell中有一个功能returns我是一张卡片的继承者。我知道如何使用列表理解来访问卡片,但不太确定如何获取下一张卡片,所以 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]

提示:使用dropWhile (/= crd) pck从头开始移除所有的牌,直到找到你的牌。那么,剩下的第一张牌是crd。下一个就是你想要的

不过,如果 pck 是一副 标准顺序的牌组 ,遍历整个牌组以找到下一张牌似乎效率很低。

你可以让你的Card类型实例化Enum typeclass by deriving Enum, then use the succ函数来获得后继卡。 请注意,将牌组的最后一张牌传递给 succ 会导致运行时错误,尽管看起来您的第一个 pCard 函数体会解决这个问题。

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