【问题标题】:Next element in a list列表中的下一个元素
【发布时间】:2015-11-04 18:18:47
【问题描述】:

我在 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]

【问题讨论】:

    标签: list haskell list-comprehension


    【解决方案1】:

    提示:使用dropWhile (/= crd) pck 从头开始​​删除所有卡片,直到找到您的卡片。然后,剩下的第一张卡是crd。后面的就是你想要的。

    不过,如果pck 是一副标准顺序的牌组,则在整个牌组中循环寻找下一张牌似乎效率很低。

    【讨论】:

    • 找前任怎么样。那个有效!
    • 做对口。 last $ takeWhile (/= crd) pck
    【解决方案2】:

    您可以让您的Card 类型通过deriving Enum 实例化Enum 类型类,然后使用succ 函数获取后继卡。 请注意,将卡片组的最后一张卡片传递给 succ 会导致运行时错误,尽管看起来您的第一个 pCard 函数体会解决这个问题。

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

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 2011-12-31
      • 1970-01-01
      • 2022-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多