One may set a Default
value for the arguments of a function:
Default[f] = 5;
And then use:
f[a_, b_.] := {a, b}
f[1, 2]
f[1]
{1, 2}
{1, 5}
This creates the following Values:
DefaultValues[f]
DownValues[f]
{HoldPattern[Default[f]] :> 5}
{HoldPattern[f[a_, b_.]] :> {a, b}}
From this one might think that the value 5
is not fixed in the definition of f
, but addresses the DefaultValues
assignment. However, if we change the DefaultValues
, either directly or using:
Default[f] = 9;
DefaultValues[f]
{HoldPattern[Default[f]] :> 9}
and use f
again:
f[1]
{1, 5}
we see that the new value is not used.
Therefore, my questions are:
Why does the default value used by
f[a_, b_.] := {a, b}
not change withDefaultValues
?Where is the real default value (
5
) stored, since it does not appear in eitherDownValues
orDefaultValues
?