gpt4 book ai didi

Haskell:惰性评估可以帮助更早地停止投票吗?

转载 作者:行者123 更新时间:2023-12-04 14:18:22 25 4
gpt4 key购买 nike

假设我有 10 个重要的不同功能(并行或不并行)决定同一个问题。
有没有一种好方法来实现一个投票方案,当达到多数并且不需要更多计算时,它会自动实现延迟?

obs.:这更多是关于惰性 ev 的范围/限制的问题。
当然,一个简单的“如果”可以检测到多数。

谢谢

[编辑 1]

... simple "if" could detect a majority.



抱歉,我的意思是“单个如果”->“单个等待所有过程完成”。

... parallel or not ...



在这种情况下,我只是不知道并行性很重要。 (我的英语模棱两可的问题)

最佳答案

简短的回答。 是的,可以实现这样的系统,但不,内置的懒惰对你没有帮助。

长答案。 我相信你需要一点不同的懒惰。 Haskell 的惰性求值是一种 normal evaluation order ,其工作原理如下:

  • 当函数被调用时,评估器首先尝试计算它,而不计算它的参数。
  • 如果控制流到了需要计算某个参数的地步,它就会评估它。然后函数的评估继续。

  • 因此,根据需要“按需”评估参数。此外,它们被一一评估。这对语言本身来说是一个好主意,即使是具有应用评估顺序的命令式语言也无法在没有这种惰性函数的情况下工作 - 像 or 这样的运算符和 and在大多数编程语言中本质上都是懒惰的。但在你的情况下,它是你真正需要的吗?没有。您需要并行评估所有参数并在计算某些参数时完成对函数本身的评估。

    如何实现。 您需要完全重新实现评估系统,我相信没有副作用和惰性评估的纯函数式编程只会阻碍您。这是一种方法。创建函数,例如 paplly :: [ArgumentType] -> TriggerFunction -> ResultType , 其中 papply代表“并行应用”, ArgumentType是要计算的一种实际参数(在您的情况下,它可能是函数的关闭+要解决的问题), TriggerFunction是一个函数,在计算其中一个 args 时调用, ResultType在你的情况下是 bool 值。此功能必须按以下方式工作:
  • 并行运行所有参数的评估。
  • 当计算参数之一时,它必须使用评估结果调用 TriggerFunction。
  • 触发功能必须有一个“内存”来记住所有以前的结果。如果在调用时发现有足够的参数来完成对主函数的评估,它就会这样做,并中断计算其余参数。

  • 这只是其中一种方法,而不是最实用的方法(它使用可变的“内存”)。您还可以与其他参数并行运行触发器函数,并使用某种同步在所有参数之间传递控制。或者您可以使用某种类型的消息,例如 Erlang 或 Scala。不幸的是,我没有足够的 Haskell 经验来编写实际代码,但@Dietrich Epp 的帖子似乎代表了类似的想法,因此您可以将其用作基础。

    关于Haskell:惰性评估可以帮助更早地停止投票吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487360/

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