From: Larry Evans (cppljevans_at_[hidden])
Date: 2005-03-05 15:17:27


Is there any interest in a proposed mpl sequence, fold_seq,
derived from mpl::fold and contained in
boost-sandbox.sourceforge.net/vault/ in
cppljevans/mpl/fold_seq_test.zip? This zip contains:

   * a test driver, fold_seq_test.cpp
   * a header file, fold_seq.hpp
   * bjam output of driver for intel
   * bjam output of driver for gcc.

A better name for fold_seq might be cummulative_app since
each element is a "partial_application" of the ForwardOp
"operation" to part of the Seqence, where ForwardOp and
Seqence are the arguments to fold, as described here:

   http://www.boost.org/libs/mpl/doc/refmanual/fold.html

The reason for term "partial_application" is that it
corresponds to "partial sum" described here:

   http://mathworld.wolfram.com/PartialSum.html

Alternative names include "prefix reduction" or "scan":

   http://nf.apac.edu.au/training/MPIRefs/MPI_1.1/node84.html#Node84

Anyway, it seems that it's a useful extension to fold,
since, as seen by the above references, the corresponding
math concept occurs often.

In addition, the test driver in the vault contains
test_partial_product, where the value's at each element of
the fold_seq correspond to elements in a cummulative
product:

   http://mathworld.wolfram.com/CumulativeProduct.html

Such a cummulative product could be used to calculate, at
compile time, the strides for an instance of mult_array.

Also, fold_seq could be used as a replacement for the
get_side_type template class mentioned here:

   http://article.gmane.org/gmane.comp.lib.boost.devel/118867

and used to access the elements in a tuple, as demonstrated
by the test_tuple_access function in the test driver.

I'd be glad to discuss improvements or reasons why it's
unneeded.

TIA.