- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在 ReaderT r (Rand StdGen) a
中进行计算,我希望并行运行。我遇到过Monad Parallel看起来它会做我想要的。
已经有一个用于 ReaderT
的 MonadParallel 实例,但我必须为 monad-random 中的 Rand
创建自己的实例。 。但是,我不确定我是否做对了。我不太熟悉 Haskell 中的并行编程,但我相信并行运行计算应该给出与正常运行时相同的值。因为我的 Rand 的 bindM2 实例使用 split
(因此从同一个初始生成器获取一组不同的随机数),所以我的实例并非如此。
instance P.MonadParallel (Rand StdGen) where
bindM2 f ma mb = do
split1 <- getSplit
split2 <- getSplit
let a = evalRand ma split1
let b = evalRand mb split2
a `par` b `pseq` f a b
虽然我觉得有必要忽略这一点(数字仍然是随机的,对吧?)我也忍不住觉得我错过了一些东西。这样可以吗还是有更好的解决方案?
最佳答案
我主要担心的是,这违反了以下保证:
Apart from the possible ordering of side effects, this function is equivalent to
\f ma mb-> do {a <- ma; b <- mb; f a b}
这些会产生不同的结果:
let g = mkStdGen 0
r = evalRand (do x <- getRandom
y <- getRandom
return (x, y)) g
对比
let g = mkStdGen 0
r = evalRand (P.bindM2 (\x y -> return (x,y)) getRandom getRandom) g
这确实提出了关于 split
的有趣问题、伪随机数以及随机数在纯度方面的性质。我很难想象你的实例会产生不利影响的情况,但软件系统的复杂性一直让我感到惊讶。正因为如此,我不会违反对 bindM2
的期望,即使它是随机数。
关于haskell - Rand 的 MonadParallel 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102146/
我目前正在 ReaderT r (Rand StdGen) a 中进行计算,我希望并行运行。我遇到过Monad Parallel看起来它会做我想要的。 已经有一个用于 ReaderT 的 MonadP
我是一名优秀的程序员,十分优秀!