Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 列表中的下一个元素_List_Haskell_List Comprehension - Fatal编程技术网

List 列表中的下一个元素

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(

我在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(K,C)=(A,S)--最后一张卡的例外情况
pCard crd pck=head[p |(pos,p)提示:使用
dropWhile(/=crd)pck
从开始移除所有卡,直到找到您的卡。然后,剩余的第一张卡是
crd
。之后的一张就是您想要的卡


尽管如此,如果pck是一个标准顺序的卡片组,那么在整个卡片组上循环查找下一张卡片似乎效率很低。

您可以通过
派生Enum
使您的
卡片
类型实例化typeclass,然后使用该函数获取后续卡片。 请注意,将卡片组的最后一张卡片传递给
succ
将导致运行时错误,尽管看起来第一张
pCard
函数体将对此进行解释


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

如何找到前一个呢?那一个成功了!做对应的。
最后$takeWhile(/=crd)pck