【问题标题】:How do I get a sequence of cards in haskell [closed]如何在haskell中获得一系列卡片[关闭]
【发布时间】:2015-12-02 15:56:32
【问题描述】:

例如,如果我有这个序列,我如何在 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]

【问题讨论】:

  • 您想要随机序列还是从nm 的特定序列?
  • 我想移动顺序的前两张卡,所以这两张应该返回,否则,如果 SEVEN 是 C,那么什么都没有,因为那意味着我只有一张卡,所以没有顺序。我只能从开头移动它们,而不是从列表的任何其他部分移动,所以头部应该在 0 上移动
  • 您使用take 2 seq 获取前两个。我不明白你的问题和评论的其余部分,你需要给出更好的解释。
  • 我正在尝试查看位置 0 上的卡片是否是下一张卡片的前身,如果是,则取走它,并继续直到我有一系列卡片,否则,仅返回 []。所以 [(SIX,H),(SEVEN,H),(EIGHT,H),(NINE,C)] 将只返回头部的有序序列,即 [(SIX,H),(SEVEN,H) ,(八,H)]

标签: list haskell list-comprehension


【解决方案1】:

注意zip cards (tails cards) 如何为您提供一系列连续的卡片对列表cards

现在你只需要从这个列表中takeWhile,比较你的价值观和西装:

findSeq cards = takeWhile sameCards $ zip cards (tails cards) where
  sameCards (value1, suit1) (value2, suit2) = 
     suit1 == suit2 & value1 `precedes` value2

我想你已经定义了像precedes 这样的函数。

注意:我目前没有 Haskell 编译器。代码未试过。

【讨论】:

  • 查看我目前拥有的功能。如果没有序列,那即使是第一个元素也会返回给我。如果没有卡片序列,我怎么能不返回任何东西?
  • 也试过 findSeq lis@(h:(q:_))=takeWhile (sameCards h q) lis where sameCards crd1 crd2= Just crd1==pCard crd2 pack,但显然我得到一个错误争论太多!
猜你喜欢
  • 2021-09-04
  • 1970-01-01
  • 2023-02-19
  • 1970-01-01
  • 2022-12-22
  • 1970-01-01
  • 2021-11-24
  • 2021-03-10
相关资源
最近更新 更多