我已经定义了卡牌西服哈斯克尔
module Card (Suit(..), Rank(..), Card(..)) where
import Data.List
data Suit = Club | Diamond | Heart | Spade
deriving (Eq, Ord, Bounded, Enum)
suitchars = "CDHS"
data Rank =
R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 | R10 |
Jack | Queen | King | Ace
deriving (Eq, Ord, Bounded, Enum)
rankchars = "23456789TJQKA"
data Card = Card {suit::Suit, rank::Rank}
deriving (Eq, Bounded)
instance Ord Card where
compare (Card s1 r1) (Card s2 r2) =
let suitorder = compare s1 s2
in if suitorder == EQ then compare r1 r2 else suit order
,我尝试使用
getSuit:: [Card] -> Suit
getSuit [Card s r] = Suit [Card s r]
得到我的卡的西装,但它不工作,我也有一对牌列表
allCards :: [Card]
allCards = [Card suit rank | suit <- [Club .. Spade], rank <- [R2 .. Ace]]
cardPair :: [[Card]]
cardPair = [[c1, c2] | c1 <- allCards, c2 <- allCards, c1 < c2 ]
现在我想搬出去,或继续从cardPair卡的配对,包含卡那件衣服,但我得到的问题
*“它不工作[...]我有问题”*。什么不行?什么问题?编译器错误?运行时异常?你的猫着火了吗?此外,ThreeFX提供了一个不错的'cardPair'函数[上次](http://stackoverflow.com/questions/25600917/haskell-pair-two-cards),但它与你当前的问题有什么关系? (其实,你的帖子无论如何都缺少一个问题) – Zeta 2014-09-11 11:59:33