Skip to content

Decompose F.SUM/F.MIN/F.MAX functors and build them with composition using F.SUM_RANGE/F.MIN_ELEMENT/F.MAX_ELEMENT

There are now two sets of functors F.SUM(functor)/F.MIN(functor)/F.MAX(functor) and F.SUM_RANGE/F.MIN_ELEMENT/F.MAX_ELEMENT, which can be very confusing.

The F.SUM(functor)/F.MIN(functor)/F.MAX(functor) functors apply the given functor to the immediate children of the composite and return the sum/min/max value, whereas F.SUM_RANGE/F.MIN_ELEMENT/F.MAX_ELEMENT return the sum/min/max values in a container. The former can be decomposed in favor of latter i.e.

SUM = lambda functor: SUM_RANGE @ MAP(functor) @ GET_CHILDREN
MIN = lambda functor: MIN_ELEMENT @ MAP(functor) @ GET_CHILDREN
MAX = lambda functor: MAX_ELEMENT @ MAP(functor) @ GET_CHILDREN

Would need a new functor GET_CHILDREN to achieve this.

Edited by Tommaso Fulghesu