Non-exclusive pattern matching? e.g. distributiveness of a function, was: Predictable pattern matching?
Subject: Non-exclusive pattern matching? e.g. distributiveness of a function, was: Predictable pattern matching?
From: Robert Dodier
Date: Wed, 24 Dec 2008 11:29:46 -0700
On 12/23/08, Martin Sch?necker <ms_usenet at gmx.de> wrote:
> (1) int[a_ + b_, x] := int[a, x] + int[b, x]
> (2) int[c_ f_, x] := c int[f, x] /; FreeQ[c, x]
> (3) int[x^n_, x] := 1/(n + 1) * x^(n + 1) /; n != -1
> (4) int[c_, x] := c x /; FreeQ[c, x]
The part that is difficult for the Maxima pattern matcher at present
is the freeof stuff, since the result for one pattern variable depends
on another. Maxima matches variables in the order they are
encountered in the pattern, so it matches x after c (too late).
It seems feasible to detect dependencies among pattern variables
and to order them accordingly. That would not require any change
to the run-time code, in particular, it doesn't require backtracking.
Of course, it 's easy to make up examples which have cycles in
the dependency graph.
I'll take a look at it.
best
Robert
PS. On second glance, it appears x is not a variable.
Is that right? If so, that makes the matching problem simpler.