我仍在做書中的練習,其中一個練習說我應該創建一個函式:value :: Hand -> Int,它回傳手牌的值。
到目前為止,我的代碼如下所示:
data Hand = PairOf Rank | ThreeOf1 Rank | ThreeOf2 Suit
value: Hand -> Int
otherwise = 0
--
我現在有另一個問題,因為我不知道如何描述“Nothing”。這里沒有描述不出現 Pair、ThreeOf1 和 ThreeOf2 的可能手牌組合。否則 = 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
uj5u.com熱心網友回復:
您可能遇到的問題之一是什么都沒有。
這是 holdem 的完整 Hands 型別:
data HandRank
= HighCard Rank Rank Rank Rank Rank
| OnePair Rank Rank Rank Rank
| TwoPair Rank Rank Rank
| ThreeOfAKind Rank Rank Rank
| Straight Rank
| Flush Rank Rank Rank Rank Rank
| FullHouse Rank Rank
| FourOfAKind Rank Rank
| StraightFlush Rank
deriving (Eq, Ord, Show, Generic)
資料型別中的額外等級用于區分手牌,因此一對帶有 King & Queen 踢腳牌的 A 勝過一對帶有 King & Jack 踢腳牌的 A。但除此之外,它與您的設定相同。
一旦你完成了從一套牌到手牌價值的轉變,就什么都沒有了。您可能認為什么都不是和型別中的 HighHand 行。如果您的背景關系是可能的手牌,那么我會向 Hand sum 型別添加一個 NoValue,這比輸出一個Maybe Hand.
使用通配符otherwise _或value _引入錯誤的機會,因為您可能會忘記撰寫一個完整的房子,例如,您現有的功能可以作業。如果您忘記撰寫其中一種求和型別的代碼,并且沒有任何匹配模式,編譯器就會報錯。為編譯器提供一個sum型別的所有分支也是GHC的一個熱門開發領域,而且會很快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/537529.html
標籤:哈斯克尔
上一篇:顯示類Haskell
