функция zipWith в Haskell



ghci> zipWith' (zipWith' (*)) [[1,2,3],[3,5,6],[2,3,4]] [[3,2,2],[3,4,5],[5,4,3]]


Функция zipWith 'use function' * ' и параметры после нее, чтобы получить возврат.Но в этом случае,как функция zipWith ' получить результат [[3,4,6],[9,20,30],[10,12,12]] .



Пример кода с использованием zipWith был взят дословно из бесплатной онлайн-книгиLearn You a Haskell for Great Good .
722   1  

1 ответ:

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

Comments

    Ничего не найдено.