如何在Haskell中定义状态?我的第一个想法是使用代数数据类型。我也听说过国家monad,但我真的不知道它是什么。 举个例子,让我们使用Texas hold'em扑克。我们必须代表以下状态:
答案 0 :(得分:10)
在Haskell中使用状态有两个部分。第一个是建模和创建数据类型来表示你的东西(就像在任何其他语言中一样)。例如:
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...
然后就是使用这个状态的一部分。你不需要知道monad就可以开始制作东西了(当你掌握了基础知识时,你应该只考虑高级主题)。特别是你不需要使用“state”,你只需要以函数式接收和返回这些值。
例如,一个回合将是一个采用表状态(玩家和牌组列表),玩家动作列表并返回新表状态的函数(在给出这些动作后播放roud之后)。 / p>
playRound :: TableState -> [Action] -> TableState
playRound (players, deck) actions = ...
当然,现在您有责任确保在创建新表状态后忘记旧表状态。像州议会这样的事情有助于解决这种组织问题。