
On 03/06/2005 02:17 PM, Pavel Chikulaev wrote:
"Larry Evans" <cppljevans@cox-internet.com> wrote in message [snip] (from Larry Evans' post here: http://article.gmane.org/gmane.comp.lib.boost.devel/119148 )
and then the operator* and + could be used to maybe make a lazy transtive closure, First^*, of this relation. Similarly, it could [snip] In addition to the above, I'd also like to see if the value of a matrix multiplication and addition can be computed at compile time. If so, then I'm guessing that, given enough resources, a spirit grammar (normalized as described above) can be analyzed at compile time and used to generate a parser with compile-time generated look-ahead sets.
Actually the purpose of the library is to choose best algorithm at compile-time, and then apply it at run-time.
Yeah, that's probably where I've misunderstood your library. The values I wanted would all be calculated at runtime; however, I'm afraid the compiler will be overwhelmed and abort (due to max template instantiation depth). Hence, I'm also anticipating I'll may need something like your library. Maybe the expression for transitive closure can be created and then feed with some values to compute the closure. Anyway, what I think will work for compile-time calculation is a combination of fold_seq (see vault under cppljevans/mpl) where the ForwardOp is simply matrix multiplication. Then, if the 1st argument to fold_seq is the a sequence of identical values of some binary relation, M, then the result would be a sequence: { M, M*M, M*M*M, ..., M^n } where n is the size of the 1st arg to fold_seq and the * in the above is simply matrix multiplication, and M^n is M raised to the n-th power. The transitive closure is gotten by maxtrix sum of this. Unfortunately, this is only for types and not values. Maybe you could figure out how to actually use it to calculate the values? If not, I'll try to get to it later.