Array.reduce / Array.fold ============= Array.reduce ************* .. image:: reduce.gif :height: 200px Функция `Array.reduce `_ является своеобразной альтернативой циклам. Она последовательно применяет функцию, которую вы пожелаете, к каждому из элементов массива. Массив при этом должен иметь хотя бы 1 элемент. В противном случае получим исключение. Принцип работы reduce примерно такой: 1. Запоминаем значение первого элемента массива в переменную acc (аккумулятор) 2. Вызываем функцию f и передаем в нее два аргумента: аккумулятор и следующий элемент массива 3. Записываем в переменную acc значение, полученное на предыдущем шаге. 4. Повторяем шаги 2 и 3 до тех пор, пока не достигнем конца массива. 5. Возвращаем значение аккумулятора. Не трудно заметить, что основным недостатком функции reduce является то, что тип возвращаемого результата должен совпадать с типом элемента массива. Если у вас массив строк - то результатом reduce может быть только строка. Но не стоит отчаиваться, ведь есть более гибкая версия этой функции - Array.fold Array.fold *********** .. image:: fold.png :height: 300px Принцип работы `Array.fold `_ почти такой же как у reduce. Основные отличия: * аккумулятор инициализируете вы сами * функция f применяется и к первому элементу Тип аккумулятора, и, следовательно, тип возвращаемого значения, может отличаться от типа элемента массива. Например, если у вас массив строк, то результатом может быть массив каких-либо объектов, чисел и т.д. На базе Array.fold работают более изощренные функции, такие как Array.fold2, Array.foldBack