ghci> zipWith' (zipWith' (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]]
函数zipWith'使用函数'*'和它后面的参数得到返回。但在这种情况下,函数zipWith如何得到结果[[3,4,6],[9,20,30] ],[10,12,12]]。
使用zipWith的代码示例'是从免费在线书籍Learn You a Haskell for Great Good逐字逐句获取的。
答案 0 :(得分:18)
zipWith
在两个列表的每个成员上成对调用给定的函数。因此zipWith f [a,b,c] [x,y,z]
评估为[f a x, f b y, f c z]
。在这种情况下,f
为zipWith (*)
,列表的元素也是列表,因此您得到:
[ zipWith (*) [1,2,3] [3,2,2],
zipWith (*) [3,5,6] [3,4,5],
zipWith (*) [2,3,4] [5,4,3] ]
现在内部调用zipWith
成对地增加内部列表的元素,所以你得到:
[ [3,4,6],
[9,20,30],
[10,12,12] ]