haskell - 数组有 zipWith 函数吗?

标签 haskell

我有两个大小相等的数组,我想按元素组合它们。做这个的最好方式是什么? array 包似乎没有提供 zipWith 等效函数。

我不太愿意做自己的函数,因为我能想到的主要方法是用列表来回转换。我关心速度,我认为这种方式不是最有效的方式。

最佳答案

选项 1:使用 repa .如果您关心它,也可能会从并行性中获得一些性能优势。

选项 2:仅使用 bounds 获取索引。我建议一般避免列表理解;尽管在这种情况下其他答案正确使用了它们,但养成做正确事情的习惯可能是值得的。

zipWithArr f xs ys = listArray (bounds xs) $ fmap (liftA2 f (xs !) (ys !)) (range (bounds xs))

之所以可行,是因为 Haskell 的列表是惰性的,我们通常可以将它们视为控制结构(由于各种优化),尽管我们可以将它们视为容器。此外,GHC 最多为每个 lambda 计算一次表达式,因此通常您不必担心这样做效率低下。

关于haskell - 数组有 zipWith 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141280/

相关文章:

haskell - 如何以跨平台的方式设置环境变量?

haskell - 的 是什么意思? Haskell 中的记录语法如何做?

haskell - 最小 Warp 网络服务器示例

multithreading - parBuffer 评估没有给出预期的加速

haskell - 如何将 haskell unicode 字符串解析为 unicode 字符

haskell - 单体 Haskell 项目 vs 将它们分割成更小的程序

Haskell token "#"

performance - 合并功能要慢得多

haskell - 定义类型同义词 (GHC) 的类型同义词时出现奇怪的错误

c++ - 将自定义对象文件与 Cabal 链接