gpt4 book ai didi

haskell - Grokking Haskell 中的随机数生成

转载 作者:行者123 更新时间:2023-12-02 13:16:46 24 4
gpt4 key购买 nike

我有一个函数probabilities :: String -> [(String, Double)]它返回基于输入 String 的概率分布。现在我想生成一个新的随机String基于该概率分布,函数类似于 generate :: String -> String 。我最近发现 fromList Control.Random.Monad ,但我正在努力将其用于我的具体情况。有人能帮我指出正确的方向吗?如果您需要更多信息,请询问。

更多信息:

我需要能够调用generate重复用于另一种算法。

最佳答案

你需要单子(monad)。让我们将 generate 的类型更改为:

generate :: (MonadRandom m) => String -> m String

然后您可以按照您的预期定义generate:

generate = fromList . probabilities

您可以通过两种方式从另一个函数 foo 重复调用 generate:

在这两种情况下,我们都需要 iterateM (也在 monad-loops 中)

iterateM :: Monad m => Int -> (a -> m a) -> a -> m a
iterateM 0 _ a = return a
iterateM n f a = f a >>= iterateM (n-1) f
  1. Foo 可以是一元的:

    foo :: (MonadRandom m) => String -> m String
    foo = iterateM 10 generate
  2. 或者您可以创建一个状态并使 foo 纯:

     foo :: Int -> String -> String
    foo seed str = evalRand (iterateM 10 generate str) (mkStdGen seed)

关于haskell - Grokking Haskell 中的随机数生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21897227/

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