我正在实现一个combine :: [[a]] -> [[b]] -> (a -> b -> c) -> [[c]]
给定两个二维列表的函数,将给定的函数应用于f :: a -> b -> c
二维列表的条目。换句话说:
[[a, b, c], [[r, s, t], [[f a r, f b s, f c t],
combine [d, e, g], [u, v, w], f = [f d u, f e v, f g w],
[h, i, j]] [x, y, z]] [f h x, f i y, f j z]]
现在我怀疑combine = zipWith . zipWith
,因为我已经尝试过了,它给了我预期的结果,例如
(zipWith . zipWith) (\x y -> x+y) [[1,2,3],[4,5,6]] [[7,8,9],[10,11,12]]
给出了预期的结果[[8,10,12],[14,16,18]]
,但我不明白为什么会这样,因为我不明白zipWith . zipWith
结果是怎样的(a -> b -> c) -> [[a]] -> [[b]] -> [[c]]
。
这里是否(.)
还在进行通常的功能组合?如果是这样,你能解释一下这如何适用zipWith
吗?