Mon Dec 17 10:07:27 CET 2007
inspecting macro output
finding a common tail in 2 lists is necessarily quadratic. but i
probably don't need that, since i'm looking only for common subtails
i'm still looking for a good description of the problem.. the problem
of finding the common tail seems to be the one to give insight.
what about this:
1. split input and output 'qw' atoms off
2. check if remaining tail is the same
this is the only behaviour that's valid. once this data is obtained,
it could be peeled to isolate the behaviour of a macro, at which point
cold be decided to 'unevaluate' it.
now, what does unevaluate means?
... (qw 1) (qw 2) + -> ... (qw 3)
this could be replaced by (qw (1 2 +))
this is always the case: since the evaluation can be performed again
later. the only information that is extracted at this point is whether
the macro does anything else.
the change in macro code seems to be here:
(([qw a ] [qw b] word) ([qw (wrap: a b 'metafn)]))
the 'wrap:' form needs to be replaced by something that might return a
value if the variables contain numbers.
running into a small namespace problem.. trying to use scheme names,
but it might be better to leave the meta dict in there to do this kind
of stuff, but only call it from the macros. basicly, the stuf after
wrap: should be symbolic if the parameters are symbols, and computed
if both are numeric.