2014-09-11 77 views
0

我有以下数据类型:有没有办法在Haskell的列表中加一个Enum Bounded Ord类型?

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]列表。有没有办法让我在列表中加一个CardRank?例如给出一个清单[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 = 

而我卡住了。谁能帮我?谢谢。

+3

一如既往,请想想边界条件,并更新你的问题。 – 2014-09-11 13:12:32

+0

对不起,我不太清楚您的边界条件是什么意思。 – user3928256 2014-09-11 13:21:48

+3

“Ace”的'plus'级别是什么?它应该环绕到“R2”吗? – Lee 2014-09-11 13:22:48

回答

0

你可以做一个包装SUCC为界与枚举类型:

succWrap x = if x == maxBound then minBound else succ x 

,那么你只需要

updateRanks n xs = map succWrap (take num xs) ++ drop num xs 
0
:info Enum 

非常有用!我正在寻找的功能是succ,谢谢你们。

相关问题