我正在攻读"功能编程入门"考试.这是我遇到的问题之一:
"以下数据类型用于表示一手牌:
data Suit = Hearts | Clubs | Diamonds | Spades
deriving Eq
data Rank = Numeric Int | Jack | Queen | King | Ace
deriving Eq
data Card = NormalCard Rank Suit | Joker
deriving Eq
Run Code Online (Sandbox Code Playgroud)
定义一个函数
countAces:: [Card] -> Int
countAces = undefined
Run Code Online (Sandbox Code Playgroud)
其中countAces返回给定手牌中的牌数或者是aces或jokers.例如,如果手中有三个A和两个笑话,答案将是五个."
所以我想我会这样写:
countAces:: [Card] -> Int
countAces [] = 0
countAces (c:cs) | c == (NormalCard Ace _) = 1 + countAces (cs)
| c == Joker = 1 + countAces (cs)
| …Run Code Online (Sandbox Code Playgroud)