| Украина |
Детализация
Аргументы, которые могут быть пропущены
С помощью шаблона можно также описать, что делать, если аргумент функции отсутствует.
Шаблон "x_:v" - если аргумент пропущен, то его значение по умолчанию ( Default ) равно v. Шаблон "x_h:v" - то же с указанием типа.
Шаблон "x_." - если аргумент пропущен, то его значение по умолчанию ассоциировано с определяемой функцией, а именно, если имя этой функции f, то умолчание хранится в Default[f] (отметим, что Default[f] нужно задавать до определения функции):
In[126]:=f[x_; 10] := x2;
f[5]
f[5, 7]
f[]
Out[127] = 25
Out[128] = f [5, 7]
Out[129] = l00
In[130]:= Clear [f ]
Default[f] = 9;
f[x_.] : = x2;
f[5]
f[5, 7]
f[]
Out[133] = 25
Out[134] = f [5, 7]
Out[135] = 81Команда Clear не очищает значение Default. Чтобы очистить его, воспользуйтесь либо Default[f] =., либо ClearAll[f] :
In[136]:=Clear[f]
Definition[f]
Out[137] =
Default[f]=9
In[138]:=Default[f] =.
Definition[f]
Out[139]=Null
In[140]:=Default[f]=9;
f[x_]:=x2 ;
Definition[f]
ClearAll[f];
Definition[f]
Out[142] =
f[x_]:=x2
Default[f]=9
Out[144]=NullВыбор объектов по шаблону
Выбор из списка объектов {e1,e2,...} по шаблону pattern можно осуществить с помощью команды Cases[{e1,e2,...},pattern]:
In[145]:=Cases [{l, {2, x2}, y3 , 2}, _^_]
Out[145]={y3}Выбор из объектов {e1,e2,...} по шаблону pattern на уровнях, заданных levelspec, - командой Cases[{e1,e2,...},pattern,levelspec]:
In[146]:=Cases [{l, {2, x2}, у3, 2}, _^_, {2}]
Out[146]={x2}Команда Cases[expr,pattern,levelspec] применима к произвольным выражениям expr:
In[147]:= Cases [fexp[l, {2, x2} , y3 , 2, g[y, z1/2]], _^_,
{0, Infinity}]
Out[147]={x2, y3, ?z }
In[148] :=Clear [f, tint, fobj , fexp, fseq, fnulseq]Опции
С опциями мы сталкивались выше, настраивая вид графики. Здесь мы разберемся с тем, как они устроены.
Каждому объекту s можно приписать опции rhs, выполнив команду Options[s] = rhs:
In[l49]:=Options[s]={a, b, c}
Out[149]={a, b, c}Меняя Options, можно управлять процессом вычисления выражения. В приведенном ниже примере команда MemberQ[Options[s], a] проверяет, входит ли объект a в список Options[s] :
In[150]:=s[x_]:=If[MemberQ [Options [s], a] ,
Print["a входит в Options"],
Print["a HE входит в Options"]]
s[2]
а входит в Options
In[152]:= Options[s]={b,с};
s[2]
a HE входит в OptionsУ многих встроенных функций и констант имеются заранее заданные опции. Обычно они имеют вид правил
. Чтобы посмотреть опции у объекта s, выполните команду Options[s]:
In[154]:=Options[Plot]
Out[154] =
{AlignmentPoint -> Center, AspectRatio -> 1/(GoldenRatio),
Axes -> True, AxesLabel -> None, AxesOrigin -> Automatic,
AxesStyle -> {}, Background -> None,
BaselinePosition -> Automatic, BaseStyle -> {},
ClippingStyle -> None, ColorFunction -> Automatic,
ColorFunctionScaling ->True, ColorOutput ->Automatic,
ContentSelectable -> Automatic,
CoordinatesToolOptions -> Automatic,
DisplayFunction : -> $DisplayFunction, Epilogs {},
Evaluated -> Automatic, EvaluationMonitor -> None,
Exclusions -> Automatic, ExclusionsStyle -> None,
Filling -> None, FillingStyle -> Automatic,
FormatType : -> TraditionalForm, Frame -> False,
FrameLabel -> None, FrameStyle -> {},
FrameTicks -> Automatic, FrameTicksStyle -> {},
GridLines -> None, GridLinesStyle -> {}, ImageMargins -> 0.,
ImagePadding -> All, ImageSize -> Automatic,
ImageSizeRaw -> Automatic, LabelStyle -> {},
MaxRecursion -> Automatic, Mesh -> None,
MeshFunctions -> {Bl &}, MeshShading -> None,
MeshStyle -> Automatic, Method -> Automatic,
PerformanceGoal : -> $PerformanceGoal, PlotLabel -> None,
PlotPoints -> Automatic, PlotRange -> {Full, Automatic},
PlotRangeClipping -> True, PlotRangePadding -> Automatic,
PlotRegion -> Automatic, PlotStyle -> Automatic,
PreservelmageOptions -> Automatic, Prologs -> {},
RegionFunction -> (True s) , RotateLabel -> True,
Ticks -> Automatic, TicksStyle -> {},
WorkingPrecision -> MachinePrecision}Чтобы посмотреть значение конкретной опции объекта s, выполните команду Options[s,name], где name - имя требуемой опции:
In[155]:=Options[Plot,Plotstyle]
Out[155]={PlotStyle -> Automatic}
In[156]:=Plot[{Sin[x],Cos[x]},{x,0,1}]Чтобы изменить опции объекта s с именами name1, name2,..., выполните команду
:
In[157]:=SetOptions [Plot, PlotStyle -> Dashing [{. 05 , .01}]];
Options[Plot, PlotStyle]
Out[158]={PlotStyle ->Dashing[{0.05,0.01}] }
In[159]:=Plot[{Sin[x], Cos[x]}, {x,0,1}]In[160]:=SetOptions [Plot, PlotStyle -> abc] ;
Options[Plot, PlotStyle]
Plot[{Sin [x] , Cos[x]}, {x, 0, 1}]
Out[l6l]={PlotStyle -> abc}Graphics: :gprim:
abc was encountered where a Graphics primitive or directive was expected. >>
Graphics: :gprim:
abc was encountered where a Graphics primitive or directive was expected. >>Для опций, определенных в виде правил замены, имеются удобные способы их использования и изменения в пользовательских функциях. Выражение OptionsPattern[] используется в качестве последовательности опций определяемого выражения. Выражение OptionValue[name] - значение опции name (правая часть выражения
) из списка опций OptionsPattern[]:
In[16З]:=Clear[s]
Options[s]={u ->u0,v->v0};
s[x_,OptionsPattern[]]:=
{x,OptionValue[u],OptionValue[v]}
s[l]
s[l,u->4]
s[1,u->4,v->7]
s[l]
Out[166]={1, u0, v0}
Out[167]={1, 4, v0}
Out[168]={1, 4, 7}
Out[169]={1, u0, v0}Список OptionsPattern[s] позволяет использовать в качестве аргумента выражения f опции другого выражения s, не меняя при этом опции самого выражения f:
In[l70]:=f [x_, OptionsPattern[s]]:=
{х, OptionValue[u], OptionValue[v]}
Options[f]
Out[171]={}
In[172]:=f [1]
f [1, u -> 4]
f[l, u -> 4, v -> 7]
f[l]
Out[172]= {1, u0, v0}
Out[173]= {1, 4, v0}
Out[174]= {l, 4, 7}
Out[175]= {1, u0, v0}Правила в опциях могут быть как в виде Rule (или
), так и в виде RuleDelayed (или lhs :> rhs ). В этом примере значение опции с именем u равно 10 и не меняется при изменении х:
In[176]: = х = 10;
Options [s] = {u -> x, v -> v0};
s[l]
Out[179]= {1, 10, v0}
In[179]: = x = 8;
s[l]
Out[180]= {1, 10, v0}А в этом примере значение опции с именем u равно текущему значению выражения x:
In[181]: = х = 12;
Options [s] = {u: -> x, v -> v0};
s[l]
Out[183] = {1, 12, v0}
In[184]:=x = 9;
s[l]
Out[185]= {1, 9, v0}В этом примере значение опции с именем u также равно текущему значению выражения x:
In[186] := Clear [s, x]
Options [s] = {u -> x} ;
s[OptionsPattern[]] : = OptionValue[u]
s[]
s[u -> 1]
Out[189] = x
Out[190] = 1
In[191]:=x = 5;
s[]
Out[192] = 5
In[193]: = x = 7;
s[]
Out[194] = 7Команда Clear[s] не очищает опции для s. Чтобы очистить s полностью, вместе с опциями (и еще некоторыми связанными с s объектами), воспользуйтесь командой ClearAll[s]:
In[195] := Clear [s, f]
Definition[s]
Out[196] =
Options [s] = {u -> 9}
In[197]:=ClearAll [s]
Definition[s]
Out[198]=Null

