【发布时间】:2012-12-19 11:06:09
【问题描述】:
我正在学习 Haskell,所以我正在编写一些简单的纸牌游戏。我已经定义了一些数据类型:
data Rank = Ace|Two|Three|Four|Five|Six|Seven|Eight|Nine|Ten|Jack|Queen|King deriving (Eq,Show,Ord)
data Suit = Hearts|Spades|Diamonds|Clubs deriving (Show)
data Card = Card Rank Suit
现在我想创建一副包含 52 张卡片的原始牌组。我确信有一种巧妙的方法可以做到这一点,但我能想到的只是:
pristineDeck = [Card Ace Hearts, Card Two Hearts, ...]
我可以让 Haskell 为我生成这个列表吗?
【问题讨论】:
-
让你的类型派生出“Enum”类型类(只需将 Enum 放在
Show旁边即可)。他们三个:等级,西装和卡片。 -
P.S.您正在寻找的不是叉积,而是涉及 3D 矢量的东西。您的意思可能是“笛卡尔积”。
-
@BenMillwood 我的错...“SQL 交叉联接”+“笛卡尔积”+ 物理学学位
-
@BenMillwood:最好还是稳妥行事,像数学家一样——把一切都称为“产品”,并依靠上下文来消除歧义。如果您觉得大方,也许可以将其称为“张量积”。
-
@C.A.McCann:你有金额吗?而是将其称为副产品!
标签: haskell cartesian-product algebraic-data-types