Re: Function Name from Inside the function
- To: mathgroup at smc.vnet.net
- Subject: [mg71690] Re: [mg71639] Function Name from Inside the function
- From: "Chris Chiasson" <chris at chiasson.name>
- Date: Sun, 26 Nov 2006 03:49:30 -0500 (EST)
- References: <200611251037.FAA15687@smc.vnet.net>
Functions:
Trace TracePrint TraceDialog
Options
TraceInternal, TraceForward, TraceBackward, TraceAbove
arguments:
an expression to trace
(optional) a pattern to watch for, which can drastically limit the
size of the trace output
Other Functions:
On / Off - used to track assignments to symbols
Using these tools, you too can come to hate evaluation chains and the stack.
On 11/25/06, Philipp <Philipp.M.O at gmail.com> wrote:
> Is there a way to get a function name from inside the function during
> the execution time?
>
> One reason is that it would greatly aid debugging.
>
> To illustrate the concept, let's assume that the function names are
> stored in the list called $FunctionNames. Now,
>
> In[]:= Clear[f, g, h];
> f[x_] := (Print[{Last[#], #} &[$FunctionNames]]; x^2)
> g[x_] := (Print[{Last[#], #} &[$FunctionNames]]; f[x] + 5)
> h[x_] := Module[{fname = Last[$FunctionNames]},
> Print[{Last[#], #} &[$FunctionNames]];
> If[MemberQ[debugSymbols, fname],
> Print["Debug in ", fname, ", x = ", x]]; g[x]]
>
> In[]:= debugSymbols = {"h"};
> h[5]
>
> {h, {h}}
>
> Debug in h, x = 5
>
> {g, {h, g}}
>
> {f, {h, g, f}}
>
> Out[]= 30
>
> (The Print[{Last[#], #} &[$FunctionNames]] statements are only here to
> demonstrate the concept; they wouldn't be normally present.)
>
> So, at every function execution a "trace" of functions is available
> (recursion would be a pain to handle, though).
>
> Is there anything similar available in Mathematica? Even only the
> function name currently executing instead of the "trace" list.
>
> Cheers,
> Philipp.
>
>
--
http://chris.chiasson.name/
- References:
- Function Name from Inside the function
- From: "Philipp" <Philipp.M.O@gmail.com>
- Function Name from Inside the function