gpt4 book ai didi

haskell - 你如何在 Haskell 中定义状态?

转载 作者:行者123 更新时间:2023-12-04 22:50:16 24 4
gpt4 key购买 nike

你如何在 Haskell 中定义状态?我的第一个想法是使用代数数据类型。我也听说过 state monad,但我真的不知道它是什么。
例如,让我们使用德州扑克。我们必须代表以下状态:

  • 你手里拿着的两张牌
  • 板上的卡片
  • 您之前的玩家的 Action ,可以是:
  • 折叠
  • 检查
  • 下注 x
  • 提高 x
  • 锅的大小
  • 金额来电
  • 筹款金额(限时扑克)
  • 最佳答案

    在 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 就可以开始制作东西(而且你应该只在掌握了基础知识后才去关注高级主题)。特别是你并不真正需要使用“状态”,你只需要以函数式的方式接收和返回这些值。

    例如,一个回合将是一个函数,它接受一个表状态(玩家列表和牌组),一个玩家 Action 列表并返回一个新的表状态(在给定这些 Action 的情况下已经播放了 roud)。
    playRound :: TableState -> [Action] -> TableState
    playRound (players, deck) actions = ...

    当然,现在您有责任确保在创建新表后忘记旧表状态。像 State monad 这样的东西有助于解决这种组织问题。

    关于haskell - 你如何在 Haskell 中定义状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7768066/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com