Mathematica: set default value for argument to nonconstant?

这一生的挚爱 提交于 2019-12-06 06:03:25

问题


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?


回答1:


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




回答2:


I recommend this:

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

Or equivalently, this:

f[x_:Null] := With[{x0 = If[x===Null, Mod[AbsoluteTime[], 86400], x]},
  x0]


来源:https://stackoverflow.com/questions/4661583/mathematica-set-default-value-for-argument-to-nonconstant

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!