List 列表中的下一个元素
我在Haskell中有一个函数,它返回一张卡的继承者。我知道如何使用列表理解访问卡,但不太确定如何获得下一张卡,因此pos+1。这是我的密码:List 列表中的下一个元素,list,haskell,list-comprehension,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] pCard::Card->Card->Card pCard(
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]
pCard::Card->Card->Card
pCard(K,C)=(A,S)--最后一张卡的例外情况
pCard crd pck=head[p |(pos,p)提示:使用dropWhile(/=crd)pck
从开始移除所有卡,直到找到您的卡。然后,剩余的第一张卡是crd
。之后的一张就是您想要的卡
尽管如此,如果pck是一个标准顺序的卡片组,那么在整个卡片组上循环查找下一张卡片似乎效率很低。您可以通过派生Enum
使您的卡片
类型实例化typeclass,然后使用该函数获取后续卡片。
请注意,将卡片组的最后一张卡片传递给succ
将导致运行时错误,尽管看起来第一张pCard
函数体将对此进行解释
我刚刚注意到您的卡
类型似乎是一个元组;我猜您使用类型
关键字定义了卡
?在这种情况下,如果不使用GHC扩展,我上面提出的解决方案将不起作用。如何找到前一个呢?那一个成功了!做对应的。最后$takeWhile(/=crd)pck