你如何在Haskell中定义状态?我的第一个想法是使用代数数据类型.我也听说过国家monad,但我真的不知道它是什么.举个例子,让我们使用Texas hold'em扑克.我们必须代表以下状态:
hug*_*omg 10
在Haskell中使用state有两个部分.第一个是建模和创建数据类型来表示你的东西(就像在任何其他语言中一样).例如:
data Card = NumberCard Int | Jack | Queen | King | Ace
type Hand = (Card, Card)
data Player = Player Hand Int --a hand and his purse
data Action = Fold | Check | Bet Int | Raise Int
type Deck = [Card]
type TableState = ([Player], Deck)
--and functions to manipulate these, of course...
Run Code Online (Sandbox Code Playgroud)
然后是你如何使用这种状态的一部分.你不需要知道单子开始做的东西(你应该有先进的主题,当你具备了基础知识掌握反正只打扰).特别是你不需要使用"状态",你只需要以函数式接收和返回这些值.
例如,一轮将是一个获取表状态(玩家和牌组列表),一个玩家动作列表并返回一个新表状态的函数(在给出这些动作后播放roud之后).
playRound :: TableState -> [Action] -> TableState
playRound (players, deck) actions = ...
Run Code Online (Sandbox Code Playgroud)
当然,现在您有责任确保在创建新表状态后忘记旧表状态.像州议会这样的事情有助于解决这种组织问题.
| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |