我對haskell很陌生,所以提前抱歉。
我正在撰寫一個具有自定義型別“Rank”的程式。(二十一點牌的等級)
data Rank = Int | Jack | Queen | King | Ace
data Suit = Club | Diamond | Heart | Spade
data Card = Card Rank Suit
getCardValue :: Card -> Int
getCardValue (Card val _) = valueOfRank val
valueOfRank :: Rank -> Int
valueOfRank (Int i) = i --Doesnt work
valueOfRank Jack = 10
valueOfRank Queen = 10
valueOfRank King = 10
valueOfRank Ace = 11
現在我想接收帶有函式的卡片的相應值,我的問題是,如果值是 Int 型別,我不知道如何進行型別檢查。
uj5u.com熱心網友回復:
data Rank = Int | Jack | Queen | King | Ace
上面Int是一個資料建構式的名字,與Int型別完全無關。事實上,Jack是一個類似的資料建構式,但周圍沒有Jack 型別。
如果您想要一個Rank實際包含 type 值的值Int,則需要使用類似
data Rank = I Int | Jack | Queen | King | Ace
這I是建構式名稱(您可以根據需要重命名),Int現在指的是type。然后您可以Rank用作:
valueOfRank :: Rank -> Int
valueOfRank (I i) = i
valueOfRank Jack = 10
valueOfRank Queen = 10
valueOfRank King = 10
valueOfRank Ace = 11
請注意,沒有什么能夠阻止程式員濫用I構造,創造像無效卡值I 123,I 11和I 1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359151.html
標籤:哈斯克尔
