我仍在做書中的練習,其中一個練習說我應該創建一個函式:value :: Hand -> Int,它回傳手牌的值。
到目前為止,我的代碼如下所示:
data Card = Card Rank Suit
deriving (Show)
data Suit = Spade | Heart | Diamond | Club
deriving (Show, Ord, Eq, Enum)
data Rank = Ace | King | Queen | Jack | Ten | Nine | Eight | Seven
deriving (Show, Eq, Ord, Enum)
data Hand = PairOf Rank | ThreeOf Rank | Flush Suit
deriving (Show, Eq)
-- This function implements a value function which returns the value of the hand.
-- Pair (2 cards of the same rank) = 1
-- ThreeOf (3 cards of the same rank) = 2
-- Flush (3 cards of the same suit) = 3
-- Nothing = 0
value :: Hand -> Int
value (PairOf r1) = 1
value (Drilling r1) = 2
value (Flush s1) = 3
otherwise = 0
我現在有另一個問題,因為我不知道如何描述“Nothing”。這里沒有描述可能的手牌組合,其中不出現對子、三人組和同花。否則 = 0 會起作用還是沒有多大意義?
再次感謝您的建議,我改正了!也提前感謝您的解釋和幫助。
uj5u.com熱心網友回復:
otherwise不會在這里作業。你想要的是一個無可辯駁的模式,可以匹配任何東西,而且因為你不關心匹配的是什么,你特別想要模式_:
value :: Hand -> Int
value (PairOf r1) = 1
value (ThreeOf r1) = 2
value (Flush s1) = 3
value _ = 0
由于您不關心得到什么樣的對等,您也可以_在其他情況下使用:
value :: Hand -> Int
value (PairOf _) = 1
value (ThreeOf _) = 2
value (Flush _) = 3
value _ = 0
如果你想具體匹配Nothing(或者你想出的任何與Maybe建構式不沖突的名稱),它只是
value Nothing = 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536662.html
標籤:哈斯克尔
