Mathematica: установить значение по умолчанию для аргумента непостоянным?
Могу ли я установить значение по умолчанию для аргумента функции как нечто
что не константа? Пример:
tod := Mod[AbsoluteTime[], 86400]
f[x_:tod] := x
В приведенном выше случае "tod" изменяется каждый раз, когда я его оцениваю, но "f []" делает
не. "? f" дает:
f[x_:42054.435657`11.376386798562935] := x
показывающее значение по умолчанию, было жестко запрограммировано, когда я создал функцию.
Есть ли способ обхода?
Ответы
Ответ 1
Кажется, что работает, если функция содержит свои аргументы:
tod := Mod[AbsoluteTime[], 86400]
SetAttributes[f, HoldAll];
f[x_: tod] := x
В [23]: = f []
Out [23] = 47628.994048
В [24]: = f []
Выход [24] = 47629.048193
Или вместо значения по умолчанию вы можете использовать следующую конструкцию:
g[] := g[Mod[AbsoluteTime[], 86400]]
g[x_] := x
В [27]: = g []
Out [27] = 47706.496195
В [28]: = g []
Out [28] = 47707.842012
Ответ 2
Я рекомендую это:
f[] := f[Mod[AbsoluteTime[], 86400]]
f[x_] := x
Или, что эквивалентно, это:
f[x_:Null] := With[{x0 = If[x===Null, Mod[AbsoluteTime[], 86400], x]},
x0]