Bool -> Bool 这样 (a `parAnd` b) 将并行触发 a 和 b 的评估并在 a 或 b 评估为 fa-6ren">
gpt4 book ai didi

haskell - 如何使用 "either-side"和 "and"进行并行 "or"短路

转载 作者:行者123 更新时间:2023-12-04 03:15:37 25 4
gpt4 key购买 nike

haskell 有并行的“and”方法吗

parAnd :: Bool -> Bool -> Bool

这样
(a `parAnd` b)

将并行触发 a 和 b 的评估并在 a 或 b 评估为 false 时返回 false (而不是等待另一个)?

有没有办法实现这样的事情?

最佳答案

通常,这是不可能的。你可以做类似的事情

a `par` b `pseq` (a && b)

但如果 b计算结果为 False , a仍在全面评估中。

但是,这可以通过 Conal Elliott 创建的明确选择运算符来实现。用于他的功能响应式编程(FRP)实现。它在 Hackage 上可用 unamb打包并完全按照您的意愿进行操作。特别是,它包含
-- | Turn a binary commutative operation into one that tries both orders in
-- parallel. Useful when there are special cases that don't require
-- evaluating both arguments.
-- ...
parCommute :: (a -> a -> b) -> a -> a -> b

也直接定义 pand , por和其他类似的交换函数,使得
pand undefined False   -> False
pand False undefined -> False

关于haskell - 如何使用 "either-side"和 "and"进行并行 "or"短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223735/

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