我需要一些Haskell功能的实现方面的帮助,该功能应该与扑克牌相匹配 - 即“黑桃王牌”,“钻石2”,“杰克之心”。请注意,“s”的复数不能是Suit中构造函数名称的一部分。
参考:http://en.wikipedia.org/wiki/Standard_52-card_deck#Rank_and_color
到目前为止,这是我的代码:
data Suit = Club | Diamond | Heart | Spade
deriving (Show, Ord)
data Rank = Ace | Zwei | Drei | Vier | Fuenf
| Sechs | Sieben | Acht | Neun | Zehn
| Jack | Queen | King
deriving (Show, Enum, Read, Eq, Ord)
data Card = Card {rank :: Rank,
suit :: Suit}
deriving (Show, Read, Ord)
所需的功能应该是“match :: Card - > String”类型,产生类似“Ace of Diamond +”s“”的消息
答案 0 :(得分:5)
match c = show (rank c) ++ " of " ++ show (suit c) ++ "s"
答案 1 :(得分:3)
尝试
match c = rankToString ++ " of " ++ show (suit c) ++ "s" where
rankToString = case lookup (rank c) (zip [Two..Ten] [2..10]) of
Just n -> show n
Nothing -> show (rank c)
如果你真的想要2 of Spades
而不是Two of Spades
。
有趣的练习是尝试用你知道的任何其他语言(如西班牙语或德语,而不是Java!)来执行此操作。在荷兰语中,在某些游戏中,9个黑桃有时被称为“nel”。你会如何处理?