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

时间:2011-01-11 19:10:05

标签: wolfram-mathematica default-value

我可以将函数参数的默认值设置为某个值 那不是常数吗?示例:

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

在上面,'tod'每次评估都会改变,但是“f []”会改变 不。 “?f”产量:

f[x_:42054.435657`11.376386798562935] := x 

显示我创建函数时硬编码的默认值。

这里有解决方法吗?

2 个答案:

答案 0 :(得分:7)

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

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

在[23]中:= f []

出[23] = 47628.994048

在[24]中:= f []

Out [24] = 47629.048193

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

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

在[27]中:= g []

Out [27] = 47706.496195

在[28]中:= g []

Out [28] = 47707.842012

答案 1 :(得分:3)

我推荐这个:

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

或等效地说:

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