Mathematica: установить значение по умолчанию для аргумента непостоянным? - PullRequest
4 голосов
/ 11 января 2011

Могу ли я установить значение по умолчанию для аргумента функции, чтобы быть чем-то это не постоянно? Пример:

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

В приведенном выше тексте «tod» меняется каждый раз, когда я оцениваю его, а «f []» не. «? f» дает:

f[x_:42054.435657`11.376386798562935] := x 

, показывающий, что значение по умолчанию было жестко задано при создании функции.

Есть ли обходной путь здесь?

Ответы [ 2 ]

7 голосов
/ 11 января 2011

Кажется, что работает, если функция содержит свои аргументы:

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

В [23]: = f []

Out [23] = 47628,994048

В [24]: = f []

Out [24] = 47629,048193

Или вы можете использовать конструкцию, подобную следующей, вместо значения по умолчанию:

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

В [27]: = г []

Out [27] = 47706,496195

В [28]: = g []

Out [28] = 47707,842012

3 голосов
/ 12 января 2011

Я рекомендую это:

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

Или, что эквивалентно, это:

f[x_:Null] := With[{x0 = If[x===Null, Mod[AbsoluteTime[], 86400], x]},
  x0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...