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 - Fatal编程技术网

List 返回Haskell中的元素序列

List 返回Haskell中的元素序列,list,haskell,List,Haskell,我想返回Haskell游戏中的一系列牌。例如: [(SIX,D),(SEVEN,D),(EIGHT,S)] ~> [(SIX,D),(SEVEN,D)] [(SIX,D),(SEVEN,S)] ~> [] [(SIX,D),(SEVEN,D)] ~> [(SIX,D),(SEVEN,D)] 到目前为止,我有这个功能: findSeq :: [Card] -> [Card] findSeq [] = [] findSeq (h:t) | null t = [h]

我想返回Haskell游戏中的一系列牌。例如:

[(SIX,D),(SEVEN,D),(EIGHT,S)] ~> [(SIX,D),(SEVEN,D)] 
[(SIX,D),(SEVEN,S)] ~> []
[(SIX,D),(SEVEN,D)] ~> [(SIX,D),(SEVEN,D)]
到目前为止,我有这个功能:

findSeq :: [Card] -> [Card]
findSeq [] = []
findSeq (h:t)
    | null t = [h]
    | Just h == (pCard (head t) pack) = h:findSeq t
    | otherwise = [h]
它甚至返回第一张卡:即,不适合,例如上面的示例2。如果序列中没有连续元素的序列,如何返回序列或其他内容


我也尝试过过滤它们,但是我收到了“太多参数异常”。有什么帮助吗?

< P>嗯,从数学上讲,把一张卡片看作一张卡片的序列实际上是完全有意义的。所以不改变这种行为是个好主意。。。只要扩展定义,就可以从中获得真正想要的结果

真正的问题不是你得到的是单元素序列的单卡,而是你没有得到它们背后的任何东西。要解决这一问题,您首先不仅需要获取列表中的第一个序列,还需要获取列表中的所有序列:

findSeqs :: [Card] -> [[Card]]
findSeqs [] = []
findSeqs [h] = [[h]]
findSeqs (h:t@(h':_))  -- avoid `head` and `null`... pattern matching FTW!
  | Just h == (pCard h' pack)  = h ^: findSeqs t
  | otherwise                  = [h] : findSeqs t
我用过助手

(^:) :: a -> [[a]] -> [[a]]
h ^: (hl:ls) = (h:hl) : ls
_ ^: [] = []

一旦你有了
查找方程
,你只需要浏览第一个非退化序列的结果。

我就是这样做的:

导入数据列表(groupBy)
导入数据。函数(打开)
数据套装=球杆|钻石|红心|黑桃
数据面=Ace |二|三|四|五|六|七|八|九|十
|杰克|女王|国王
卡片类型=(正面、套装)
查找顺序::[Card]->[[Card]]
findSequences=[序列|序列1]
连续::枚举a=>[a]->Bool
连续的(x:xs)=映射from枚举xs==获取(长度xs)[from枚举x+1..]
findSequences
函数查找数据组中的所有序列(单卡序列除外)