Search code examples
wolfram-mathematicadefault-value

Mathematica: set default value for argument to nonconstant?


Can I set the default value for a function argument to be something that's not constant? Example:

tod := Mod[AbsoluteTime[], 86400] 
f[x_:tod] := x    

In the above, 'tod' changes every time I evaluate it, but "f[]" does not. "?f" yields:

f[x_:42054.435657`11.376386798562935] := x 

showing the default value was hardcoded when I created the function.

Is there a workaround here?


Solution

  • It seems to work if the function holds its arguments:

    tod := Mod[AbsoluteTime[], 86400]
    SetAttributes[f, HoldAll];
    f[x_: tod] := x
    

    In[23]:= f[]

    Out[23]= 47628.994048

    In[24]:= f[]

    Out[24]= 47629.048193

    Or you can use a construction like the following instead of a default value:

    g[] := g[Mod[AbsoluteTime[], 86400]]
    g[x_] := x
    

    In[27]:= g[]

    Out[27]= 47706.496195

    In[28]:= g[]

    Out[28]= 47707.842012