Hi,
On Thu, 15 May 2014, Richard Biener wrote:
> To me predicate (and capture without expression or predicate)
> differs from expression in that predicate is clearly a leaf of the
> expression tree while we have to recurse into expression operands.
>
> Now, if we want to support applying predicates to the midst of an
> expression, like
>
> (plus predicate(minus @0 @1)
> @2)
> (...)
>
> then this would no longer be true. At the moment you'd write
>
> (plus (minus@3 @0 @1)
> @2)
> if (predicate (@3))
> (...)
>
> which makes it clearer IMHO (with the decision tree building
> you'd apply the predicates after matching the expression tree
> anyway I suppose, so code generation would be equivalent).
Syntaxwise I had this idea for adding generic predicates to expressions:
(plus (minus @0 @1):predicate
@2)
(...)
If prefix or suffix doesn't matter much, but using a different syntax
to separate expression from predicate seems to make things clearer.
Optionally adding things like and/or for predicates might also make sense:
(plus (minus @0 @1):positive_p(@0) || positive_p(@1)
@2)
(...)
Ciao,
Michael.