Re: := vs = in some function definitions

• To: mathgroup at smc.vnet.net
• Subject: [mg113411] Re: := vs = in some function definitions
• From: Albert Retey <awnl at gmx-topmail.de>
• Date: Wed, 27 Oct 2010 05:17:49 -0400 (EDT)
• References: <i9m7u7\$j41\$1@smc.vnet.net> <i9r80e\$hp5\$1@smc.vnet.net> <ia67b0\$sqp\$1@smc.vnet.net>

```Hi,

> Thanks for all the responses! Very insightful.
>
> Here's one more thing I can't figure out:
>
> testFunction[f_][x_, y_] = Module[{},
>     Print[f[x, y]];
>     5
>     ];
> testFunction[ArcTan][x, y]
>
> Why doesn't this function print out ArcTan[x, y]?

it does, but since you used Set it does the Print when the definition is
evaluated, not when the function call is evaluated. In the rule that is
defined, Print isn't contained (in this case the rule is saved in
SubValues, which is a rather dark area of Mathematica with not much
documentation -- for many versions/years):

In[7]:= SubValues[testFunction]

Out[7]= {HoldPattern[testFunction[f_][x_, y_]] :> 5}

What you probably wanted would be:

testFunction[f_][x_, y_] := (Print[f[x, y]]; 5);

which does Print when the function call is evaluated. (note that I
omitted the Module with no variables, which doesn't do anything). Here
is what the SubValues look like for that case:

In[9]:= SubValues[testFunction]

Out[9]= {HoldPattern[testFunction[f_][x_, y_]] :> (Print[f[x, y]]; 5)}

hth,

albert

```

• Prev by Date: Re: Sneaky white space
• Next by Date: Re: Sneaky white space
• Previous by thread: Re: := vs = in some function definitions
• Next by thread: Re: := vs = in some function definitions