Можно задать значение Default для аргументов функции:
Default[f] = 5;
И затем используйте:
f[a_, b_.] := {a, b}
f[1, 2]
f[1]
{1, 2}
{1, 5}
Это создает следующие значения:
DefaultValues[f]
DownValues[f]
{HoldPattern[Default[f]] :> 5}
{HoldPattern[f[a_, b_.]] :> {a, b}}
Из этого можно подумать, что значение 5 не определено в определении f, но адресует назначение DefaultValues. Однако, если мы изменим DefaultValues, либо напрямую, либо используя:
Default[f] = 9;
DefaultValues[f]
{HoldPattern[Default[f]] :> 9}
и снова используйте f:
f[1]
{1, 5}
мы видим, что новое значение не используется.
Поэтому мои вопросы:
-
Почему значение по умолчанию, используемое
f[a_, b_.] := {a, b}, не изменяется с помощьюDefaultValues? -
Где хранится реальное значение по умолчанию (
5), поскольку оно не отображается ни вDownValues, либоDefaultValues?