我希望有一个函数可以在泊松分布之后返回一个懒惰的无限整数列表,并且具有与此类似的类型签名:
samplePoisson :: MonadRandom m -> Double -> m [Int]
其中Double
参数是泊松分布的lambda参数。
我已经查看了一些库(statistics
,random-fu
),但没有一个提供我想要的内容。
修改
是的,两个库都提供了生成跟随分布的单个值的函数,可以使用replicateM
轻松扩展这些函数以生成有限列表。
为什么我想要无限列表?因为我不知道必须生成的元素数量。
让我举个例子。 想象一下,我有一个函数返回列表中第一个1的位置。
findFirst1 :: [Int] -> Int
如果我有samplePoisson
函数来生成惰性列表,那么我可以写:
findFirst1 <$> samplePoisson 3.0
但是,如果我无法生成惰性列表,那么我将不得不编写一个类似于此类型的新函数(使用random-fu
库):
findFirst1M :: RVar Int -> RVar Int
因此,我失去我原来拥有的函数findFirst1
。
我希望这次我能说清楚。