"meta-programming" ?
- To: mathgroup at smc.vnet.net
- Subject: [mg60908] "meta-programming" ?
- From: Jack Goldberg <jackgoldberg at comcast.net>
- Date: Mon, 3 Oct 2005 04:06:06 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hello once again,
I tend to use a lot of Modules in my programming style. Here is a
model example:
myfunction[ ] := Module[ {L1, L2, L3},
L1 = some computations;
L2 = more computations;
L3 = more computations;
final touches
]
When it comes time to check special (extreme) cases I use the simple
scheme of sequencially commenting out lines to see what has
happened. In the next example I comment out lines L3 to LN (here
L3 is the last labeled line).
myfunction[ f__ ] := Module[ {L1, L2, L3},
L1 = some computations;
L2 = more computations (*;
L3 = more computations;
final touches *)
]
If the output is what I expect, I comment out L3, etc. So, in
short, if there are 10 lines of code in my module, I start with line
L1 and proceed to L10. When every line does as expected, I try the
function on still another special case.
Now my question. Can a "meta" program be constructed which does this
automatically? Specifically, this metaprogram takes the input is
myfunction and a specific input f to myfunction. The metaprogram
returns the output of each line of the module evaluated for the
specific input f to myfunction thus saving me the bother of
commenting out each line, one at a time for each extreme input to
myfunction. (An extreme input might be an empty sum or a sum with
just one term, to take two easy examples. Of course, this kind of
thing happens when myfunction is deeply embedded in other code.)
Obviously, I am reluctant to use Trace or any of its variations. But
perhaps some version of Trace is the way to go. Well, at the very
least I can stick to the old fashion way, "one line at a time".
Jack