gpt4 book ai didi

haskell - OCaml 有融合定律吗

转载 作者:行者123 更新时间:2023-12-02 10:38:59 24 4
gpt4 key购买 nike

最近在读一些涉及Haskell的函数式编程书籍。

Haskell 似乎非常喜欢“模块化程序”,例如,

f :: (Integer,Integer) -> Integer
f = sum . map sq . filter . odd . between

即使可以像这样编写相同的函数

f' (m, n) = go m
where go m | m > n = 0
| otherwise = go (m + 1) + if odd m then sq m else 0

“融合法则”也非常流行和使用( http://www.cs.ox.ac.uk/ralf.hinze/publications/IFL10.pdf )

<小时/>

我不是 OCaml 专家,但如果可能的话,我会使用 fold_leftfold_right (例如,无论如何我必须扫描整个列表并不会中途停止)。

但是,大多数时候,我会使用“模式匹配”编写显式递归代码。

我还在 github 上读了很多 OCaml 项目,显式递归似乎很常见。

此外,我从未听说过 OCaml 的融合律。

<小时/>

我的问题是

  1. OCaml 是否与它更喜欢像上面 Haskell 中所示的模块化程序一样?
  2. OCaml 也有融合法则吗?
  3. 如果我想成为 OCaml 专业人士,我真的应该关心或学习 Haskell 的融合定律吗?

最佳答案

由于副作用,Fusion 在 OCaml 中实现起来并不像在 Haskell 中那么容易。如果您继续以与 GHC 融合函数相同的方式融合 OCaml 中的函数,那么您将得到非常不可预测的结果,并且副作用发生的顺序与您编写程序的顺序不同。所以,不,正如你所说,OCaml 没有“融合法则”。这并不意味着在 OCaml 中不可能进行融合,您只是需要更加努力。

命令式语言的编译器有时会实现循环融合,这与 Haskell 中的融合具有类似的效果。 OCaml 可以从循环融合中受益,但实现起来需要更多复杂的优化。

Fusion 是 Haskell 中没有副作用的好处之一的一个很好的例子。它使某些优化更容易实现,并且可以为优化何时触发提供更有力的保证。

我认为您不需要了解太多有关融合的知识才能成为一名高效的 OCaml 程序员。

关于haskell - OCaml 有融合定律吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21031920/

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