我有以下数据类型:
data Suit = Club | Diamond | Heart | Spade
deriving (Eq, Ord, Bounded, Enum)
data Rank =
R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
Jack | Queen | King | Ace
deriving (Eq, Ord, Bounded, Enum)
data Card = Card {suit::Suit, rank::Rank}
deriving (Eq, Bounded)
现在有一个[Card]
列表。有没有办法让我在列表中加上Rank
某个Card
加一个?例如,给定列表[Card Club R2, Card Club R2]
我想将其设为[Card Club R3, Card Club R3]
。我写了以下代码:
-- | Update certain number of cards' rank in the list.
updateRankList :: Int -> [Card] -> [Card]
updateRankList num (x : xs)
| num == 0 = []
| otherwise = updateRank x ++ updateRankList (num - 1) xs
-- | Update a card's rank, didn't finish.
updateRank :: Card -> Card
updateRank card =
我被困住了。谁能帮我?谢谢。
答案 0 :(得分:0)
:info Enum
非常实用!我正在寻找的功能是succ
,谢谢你们。
答案 1 :(得分:0)
你可以为Bounded和Enum类型创建一个包装succ:
succWrap x = if x == maxBound then minBound else succ x
然后你需要
updateRanks n xs = map succWrap (take num xs) ++ drop num xs