$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Larry Evans (cppljevans_at_[hidden])
Date: 2007-04-21 13:01:09
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.