Mathematica:将参数的默认值设置为nonconstant?

bar*_*ter 4 wolfram-mathematica default-value

我可以将函数参数的默认值设置为不恒定的值吗?例:

tod := Mod[AbsoluteTime[], 86400] 
f[x_:tod] := x    
Run Code Online (Sandbox Code Playgroud)

在上面,'tod'每次评估时都会改变,但"f []"不会."?f"收益率:

f[x_:42054.435657`11.376386798562935] := x 
Run Code Online (Sandbox Code Playgroud)

当我创建函数时,显示默认值是硬编码的.

这里有解决方法吗?

Bre*_*ion 7

如果函数保存其参数似乎有效:

tod := Mod[AbsoluteTime[], 86400]
SetAttributes[f, HoldAll];
f[x_: tod] := x
Run Code Online (Sandbox Code Playgroud)

在[23]:= f []

出[23] = 47628.994048

在[24]:= f []

出[24] = 47629.048193

或者您可以使用类似以下的结构而不是默认值:

g[] := g[Mod[AbsoluteTime[], 86400]]
g[x_] := x
Run Code Online (Sandbox Code Playgroud)

在[27]中:= g []

出[27] = 47706.496195

在[28]中:= g []

出[28] = 47707.842012

  • @Brett:看起来您的解决方案可以修改以消除Hold属性的必要性.重要的是系统在定义f时不知道什么是tod.所以,我们可以在f之后定义tod,或者使用Block [{tod},f [x_:tod]:= x] (4认同)