gpt4 book ai didi

haskell - 为什么乘法只在一侧短路

转载 作者:行者123 更新时间:2023-12-03 06:14:30 24 4
gpt4 key购买 nike

我正在摆弄fix在搞乱它之后,我遇到了一些奇怪的行为,即 0 * undefined*** Exception: Prelude.undefinedundefined * 00 。这也意味着fix (0 *)*** Exception: <<loop>>fix (* 0)0 .

在玩弄它之后,似乎原因是因为使其在两个方向上短路并不简单,因为这并没有多大意义,没有某种奇怪的并行计算并从第一个非底部返回。

这种事情在其他地方也见过吗(对底部值不具有自反性的自反函数),我可以放心地依赖它吗?还有一种实用的方法可以同时制作(0 *)(* 0)无论传入的值如何,计算结果都为零。

最佳答案

你的推理是正确的。有一个unamb包提供用于您所指的并行计算的工具。事实上,它提供了 Data.Unamb.pmult,它尝试并行检查每个操作数是 1 还是 0,如果是,则立即生成结果。在大多数情况下,对于简单算术来说,这种并行方法可能会慢得多!

(*) 的短路发生在 GHC 7.10 版本中。它是由于该 GHC 版本中 Integer 类型的实现发生变化而产生的。这种额外的惰性通常被视为性能错误(因为它会干扰严格性分析,甚至理论上可能导致空间泄漏),因此它将在 GHC 8.0 中被删除。

关于haskell - 为什么乘法只在一侧短路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049689/

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