--- Helper module for reducing an array of values into a single value. -- @module lqc.helpers.reduce -- @alias reeduce --- Helper function that performs the actual reduce operation -- @param array List of elements to be reduced into 1 value -- @param acc Accumulator containing the temporary result -- @param func Function to be applied for each element in the array. Takes 2 -- arguments: element out of the array and the current state of the -- accumulator. Returns the updated accumulator state -- @param pos Position in the array to apply the reduce operation on -- @return the result obtained by reducing the array into 1 value local function do_reduce(array, acc, func, pos) if pos < #array then local new_pos = pos + 1 return do_reduce(array, func(array[new_pos], acc), func, new_pos) end return acc end --- Reduces an array of values into a single value -- @param array List of elements to be reduced into 1 value -- @param start Start value of the accumulator -- @param func Function to be applied for each element in the array. Takes 2 -- arguments: element out of the array and the current state of the -- accumulator. Returns the updated accumulator state -- @return the result obtained by reducing the array into 1 value local function reduce(array, start, func) return do_reduce(array, start, func, 0) end return reduce