Have you ever had to repeat the same expression multiple times within a formula, created a mega formula or wished that you had a way to reuse portions of your formula for easier consumption? With the...
The idea is to build formulas that need to be evaluated row by row using relative referencing (here using the @ operator) but, rather than having a formula copied down, the function would return an array which would either spill or be an argument within a further formula (e.g. to calculate the minimum row max).
In this case the function causes the Balance array to breakup so that it may be accumulated
The formulas look pretty 'clunky' but that stems from the use of the INDEX function to specify an element of an array rather than introducing more mathematical or programmatic notation e.g.
Array[ k, ] has to be rendered as INDEX( Array, k, {1,2,3} )
Flow[p] and Balance[p-1] become INDEX(Flow, p) and INDEX(Balance, p-1) respectively.