Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 如何在haskell中获得一系列卡片_List_Haskell_List Comprehension - Fatal编程技术网

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

List 如何在haskell中获得一系列卡片,list,haskell,list-comprehension,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

例如,如果我有这个序列,我如何在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]
请注意
zip卡(尾卡)
如何从列表
中为您提供连续的卡片对列表

现在,您只需从该列表中选择,比较您的价值观和西装:

findSeq cards = takeWhile sameCards $ zip cards (tails cards) where
  sameCards (value1, suit1) (value2, suit2) = 
     suit1 == suit2 & value1 `precedes` value2
我想您已经定义了一个类似于
prefers
的函数


注意:我现在没有Haskell编译器;代码未经测试。

您想要随机序列还是从
n
m
的特定序列?我想移动前两张按顺序排列的卡,因此这两张卡应该返回,否则,如果七张卡是C,则什么都不需要,因为这意味着我只有一张卡,因此没有序列。我只能从头开始移动它们,而不能从列表的任何其他部分移动它们,因此头部应该在0上pe。您可以使用
take 2 seq
获取前两个。我不理解您的问题和评论的其余部分,您需要给出更好的解释。我正在尝试查看位置0上的卡是否是下一张卡的前身,如果是,请接受它,并继续,直到我有一系列卡,否则,只返回[]。所以[(六,H),(七,H),(八,H),(九,C)]将只返回头部的有序序列,即[(六,H),(七,H),(八,H)],请参见我目前使用的函数。如果没有序列的话,它甚至会返回第一个元素。如果没有卡片序列,我怎么能什么也不返回呢?我还尝试了findSeq lis@(h:(q:)=takeWhile(sameCards h q)lis,其中sameCards crd1 crd2=Just crd1==pCard crd2 pack,但显然我得到了一个参数太多的错误!