
On 04/21/2007 12:21 PM, Maurizio Vitale wrote: [snip]
I'm not sure I understand zeros and ones: the value which is interesting is the identity. In the case of additions (and ORs) the identity is a 'zero'. In the case of multiplications (and ANDs) the identity is a 'one'. The 'other' value (zero for multiplications and one for additions) seems to only be of interest for simplifying expressions, rather than being logically important, but I might miss something here.
I believe you do understand, except that both special values (one and zero) can be used for simplification. Any expression with 0 is simplified to 0 and any expression with 1 is simplified to the subexpression without the 1. Simplification was one application. For example, there's the following code: // sequence rule folds all >>'s together into a list // and wraps the result in a composite<> wrapper struct ToySpiritSequence : as_composite< proto::tag::right_shift , proto::trans::reverse_fold_to_list< proto::right_shift<ToySpiritGrammar, ToySpiritGrammar> > > {}; in the proto/test/toysprit2.cpp file. I'm just guessing, but I'd think this folding could be accompanied by simplification based on the above rules.