optimization - Haskell 中的基本列表操作优化

标签 optimization haskell

Haskell 中的一些基本列表操作(例如 ghc)是否与它们的命令式对应项进行了等效优化?

例如,如果我有一些有限但在运行时列表中计算,它的长度是否附加到这个列表或评估函数(长度 xs)必须递归遍历整个列表?

编译器是否有一些常见的 Haskell(ghci 或一般)优化列表?

最佳答案

Haskell 非常擅长对列表进行优化,但不是你描述的类型。 Haskell 没有对列表进行“特殊”处理——它们就像其他普通的 Haskell 类型一样,尽管有一些内置的语法糖。没什么特别的

data List a = Nil | Cons a (List a)

将是。

Haskell 使用所谓的 foldr/build fusion 来优化列表,例如优化 map f (filter p list)这样它就不会为 filter 生成中间列表,但在同一次遍历中同时执行 map 和过滤器。见 here有关“ fuse ”的详细信息,或阅读 here有关其工作原理的更多详细信息。

此外,Haskell 更现代的数组库使用了更激进的融合类型,例如 fuse sum (map f (enumFromN 0 n))0 到尾递归迭代至 n-1 ,这基本上正是您想要的。调查vector package , this blog post流融合可以做什么,以及 this paper详情。

关于optimization - Haskell 中的基本列表操作优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9759745/

相关文章:

sql - 我如何在 Postgres 中优化这个 SQL 查询?

algorithm - 具有 K 个额外节点的最小生成树

python - 零和游戏16位版

algorithm - 这个上下文无关语言枚举器的伪代码实现是什么?

haskell - 为什么 GHC 认为这个类型变量不是单射的?

Haskell - 从一维列表中创建二维列表

c++ - Valgrind 输出和 rdtsc 不一致......为什么会这样?

java - 是否值得在方法中使用位运算符?

haskell - 我如何为 Free Monads 使用 Church 编码?

haskell - 将镜头传递给函数