2

我需要一些帮助来实现一个 Haskell 函数,该函数应该进行扑克牌匹配 - 即“黑桃 A”、“方块 2”、“红心 J”。请注意,“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””的消息

4

2 回答 2

5
match c = show (rank c) ++ " of " ++ show (suit c) ++ "s"
于 2013-03-22T22:20:54.510 回答
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”。你会怎么处理呢?

于 2013-03-23T00:34:26.587 回答