From Wikipedia: In functional programming , fold or reduce or accumulate is a family of higher-order functions that process a data structure in some order and build up a return value. This is as opposed to the family of unfold functions which take a starting value and apply a function to it repeatedly...