我正在尝试定义具有扑克牌等级的数据类型.
data Suit = Spades | Clubs | Hearts | Diamonds deriving Show
data Rank = 2|3|4|5|6|7|8|9|10 | Jack | Queen | King | Ace deriving Show
data Card = Card Rank Suit
Run Code Online (Sandbox Code Playgroud)
我无法将数字[2..10]作为排名,我确实尝试用数字代替LowerRanks Int,它会运行代码很好,但它不允许我调出任何数字.
data Suit = Spades | Clubs | Hearts | Diamonds deriving Show
data Rank = LowerRank Int | Jack | Queen | King | Ace deriving Show
data Card = Card Rank Suit
instance Show Card where
show (Card x y) = show x ++ " of " ++ show y
Run Code Online (Sandbox Code Playgroud)
我可以写:
Card Jack Spades我会得到的Jack of Spades.但是,当我尝试编写时Card 2 Spades,我收到一个错误:
No instance for (Num Rank) arising from the literal ‘2’
In the first argument of ‘Card’, namely ‘2’
Run Code Online (Sandbox Code Playgroud)
数据构造函数必须以大写字母或冒号开头,数字不是有效的构造函数.你可以写出排名,例如:
data Rank = Two | Three | Four | ...
Run Code Online (Sandbox Code Playgroud)
如您所述,您也可以拥有一个完整的字段:
data Rank = RNum Int | Jack | Queen | King | Ace
Run Code Online (Sandbox Code Playgroud)
旁注:我不明白这个问题"它不允许我拨打任何号码".将来请发布您尝试的实际代码和错误消息.随意澄清,我会编辑这个答案.
有了这个第二版,Rank我们可以构建每张卡,例如:
twoH = Card (RNum 2) Hearts
threeD = Card (RNum 3) Dimonds
Run Code Online (Sandbox Code Playgroud)
值得为等级制作一个自定义有界实例,并为Card,Suit提供有限的实例.衍生Ord也会很好,但是你想要为大多数纸牌游戏准备合适的套装.
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |