问题标签 [zipwith]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 我可以将 map 函数与 2 个数组一起使用吗?
我想知道是否存在任何可以做类似事情的功能
我已经尝试过 zipWith 和地图的一些变体,但没有好的结果。唯一可行的解决方案是 2x ForEach,但我想知道是否可以将其最小化为一个函数
我需要的是同时增加 array1 和 array 2 索引(比如:a1: 1, a2: 1; a1: 2, a2: 2; ...)。
这个数组还有其他类型的值
@编辑
我有点搞砸了。我真正想要的是让这个错误编写的代码工作
所以我的意图是:对于array1和array2元素,执行函数“someFunction”,并在下一个增量中,使用每个数组的下一个元素。
喜欢 :
接下来
但我希望它更优雅:P
PS(对不起这个烂摊子)
haskell - Haskell 中使用 zipWith 输出斐波那契数的优雅方式
我在 Haskell 中看到了这种斐波那契数的实现,我仍在试图弄清楚为什么它可以正常工作。所以显然,斐波那契数可以使用zipWith函数以非常紧凑的方式编写。实现如下所示
To understand better what is happening here I looked at the documentation of the zipWith function. This function adds two lists [a], [b] together using the given function (a -> b -> c). In our case the function is a simple addition. If the two lists [a] and [b] have different length (in our case list [b] is always one element shorted than list [a]) zipWith simply starts at the beginning of both lists and adds them. If the end of one list is reached it just stops no matter if the end of the other list is already reached.
在递归的第一步中,使用 [0,1] 和 tail[0,1] = [1] 调用 zipWith。这导致另一个 1 => [0, 1, 1]。在递归的第二步中,使用 [0,1,1] 和 [1,1] 调用 zipWith,导致 [0+1,1+1] = [1,2]。所以对我来说很明显递归创建了正确的斐波那契数,但我不完全理解为什么只有 zipWith 步骤之后的最后一个数字被添加到结果中,而不是整个列表。也许有人可以向我解释。那将非常有帮助。非常感谢。
haskell - 如何使用 zip 和列表理解来定义 zipWith
我正在尝试使用 zip 和列表理解来编写 zipWith 函数。应用该功能后,我需要压缩这两个列表。但是我不知道在哪里使用列表理解。
我尝试为每个列表做两个列表推导。
我希望该功能与 zipWith 相同,但是它没有加载并给出错误:
haskell - Haskell zipWith
我想总结一个压缩列表。
当我去 ghci 并执行以下操作时:
我得到了我想要的。
但是在代码中我遇到了一个错误,我不知道为什么。
如果我想编译它,我会遇到以下失败:
java - 将两个 Mono 组合在一起,其中第二个 Mono 订阅了第一个
我最近一直在使用 Java 中的反应器库和 Spring 框架来学习反应式编程,并且在大多数情况下我已经能够掌握它。但是,我发现自己有几次处于同样的境地,并希望得到一些关于我哪里出错的建议。
我苦苦挣扎的要点通常是我想用单声道做一些事情,比如找到一些补充数据,然后将其添加回原始单声道。zip 功能在我看来是理想的候选人,但我最终订阅了原始单声道两次,这不是我的意图。
这是我一直试图解决的情况类型的人为示例,因为我无法共享我的公司代码。它假设我们使用的是响应式数据库并设置了记录器,并且 Person 类是不可变的,但具有 with<FieldName> 方法。
我在运行这样的代码时看到的输出是:
这确实是有道理的,因为原始人 mono 已在两个地方订阅,我将其映射到familyMembersMono
和将它们压缩在一起时,但如果可以避免的话,我不想对存储库进行不必要的调用。
有人对处理这种行为的更好方法提出建议吗?
prolog - prolog 中的 Zipwith 应用程序
我很难理解 zipwith 在 Prolog 中的这种应用,并想知道是否有人得到它。我已经知道仿函数的作用,但我不知道它在这种情况下如何应用。我隐约认为将arg
CL 的 arg no 1 和 arg no 2 放在A
andB
中,但之后就不再使用它们了。这是谓词:
这是使用此谓词的示例:
haskell - 无法将预期类型“MultTree b”与“[MultTree b]”匹配
我对 Haskell 比较陌生。
我正在尝试创建一个行为类似于列表函数的函数 。它应该使用给定的 type 函数组合两个输入树。zipWithMult :: (a -> b -> c) -> MultTree a -> MultTree b -> MultTree c
zipWith
a -> b -> c
MultTree表示其节点可能有任意多个子节点的非空树:
例如,当我有以下两棵树时:
该功能的应用zipWithMult (+) t1 t2
应导致:
在另一棵树中没有对应节点的节点应该被简单地删除。
到目前为止我所拥有的:
我不明白为什么我的第三次表达会出现这个错误zipWithMult
我觉得我在 Haskell 的语法上犯了一个错误,但我不确定。
haskell - Data.Vector.Storable.ZipWith 中的慢流融合,但 Data.Vector.Unboxed.ZipWith 中的快速流融合
目前,我在我的函数中发现了一些奇怪的行为。我有一个转换函数,它从(x,a,b) -> (x,y,z)
. 我正在使用Data.Vector.Storable因为我正在与一些外部库进行通信。我估计测试数据集的传递函数的时间不到十几秒。但是我的实现速度太慢了!这里,是某种:
这需要几分钟才能完成!如果我激活第 35 行,它的工作速度非常快 - 所以我猜肯定存在流融合的问题(分析显示了很多 >>= 在此过程中)。我在 c++ 中重新创建了代码并获得了大约 5s 的运行时(单线程):
在我绝望的最后几天,我发现了以下奇怪的行为:如果我用 Data.Vector.Unboxed 替换 Data.Vector.Storable,它的运行速度与 c++ 代码一样快!
苏……为什么?
- 据我所知,未装箱和可存储都使用连续的内存区域 - 所以缓存/内存访问时间应该没有问题。
- 在 Storable-version 中分配了 TB 用于堆,而 Unboxed-version 只使用了几 MB。我感觉可存储版本不断在内存中移动块。
有任何想法吗?有没有一种简单的方法可以通过 Storage 实现类似的速度?(我正在使用 Stack 中的 ghc-8.10.4)
(PS:总是使用 -O2 编译,有时也使用 -fllvm -optlo-O2 :)
haskell - 使用 LambdaCase 简化 zipWith 和 case
使用以下 zipWith 表达式:
是否可以使用类似(不编译)LambdaCase
来简化表达式:case
在第一个(工作)版本中,case
接收一个元组,但在(失败的)LambdaCase 版本中,似乎case
会接收三个参数而不是一个元组。我不知道这是否可以做这样的事情。
haskell - Haskell 函数检查两个列表之间的差异
我想编写一个函数来检查两个列表是否“几乎”相等。第一个参数d
用于精度 - 元素之间的差异不得超过d
。
例如,nearlyEqual 0.5 [2,5] [2.5, 5.1]
等于True
,但nearlyEqual 0.1 [2,5] [2.5, 5.1]
等于False
。
我写了这个,但它不起作用:
我错过了什么?任何帮助将不胜感激!