作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 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
pristineDeck = [Card Ace Hearts, Card Two Hearts, ...]
最佳答案
列表推导是一个非常整洁的语法。如果推导出 Enum
在 Rank
和 Suit
你可以很简单地表达为:
pristineDeck = [ Card rank suit | suit <- [Hearts .. Clubs], rank <- [Ace .. King] ]
suit
和
rank
在不同的顺序中,第一个是因为
Card
的顺序构造函数使用,而后者是获取结果列表的顺序——以升序排列。
Monad
给出的行为。列表的例子。以下等价于上面的列表推导:
pristineDeck = do suit <- [Hearts .. Clubs]
rank <- [Ace .. King]
return $ Card rank suit
Suit
的顺序的麻烦。值在,派生
Bounded
也可以写
[minBound .. maxBound]
用
Enum
的实例枚举任何类型的所有值和
Bounded
.
关于Haskell:如何生成两种简单代数数据类型的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14166816/
我是一名优秀的程序员,十分优秀!