2011-01-20 59 views
4
ghci> zipWith' (zipWith' (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]] 

功能zipWith“使用功能‘*’和参数后得到return.But在这种情况下,该功能zipWith如何”得到的结果[3,4,6] ,[9,20,30],[10,12,12]]。zipWith功能在Haskell

使用zipWith'的代码示例是从免费的在线书籍Learn You a Haskell for Great Good逐字采取的。

+2

你的意思是`zipWith`,还是你自己定制了一个名为`zipWith'`的方法? – 2011-01-20 05:28:00

回答

16

zipWith在两个列表的每个成员上成对调用给定的函数。所以zipWith f [a,b,c] [x,y,z]评估为[f a x, f b y, f c z]。在这种情况下fzipWith (*)和列表的元素再次列出,这样就可以获得:

[ 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] ]