Детализация
Просмотр определений. Разница между Unset и Clear
Команда Definition[x] или ?x выводит определения для x (команда ?x дает больше информации), заданные с помощью команд = и :=:
In[89]:=х=а-2; x Out|90]=-2+а In[91]:=Definition [x] Out[91] = х=-2+а In[92]:=?x
х=-2+а In[93]:=Clear[x] Definition[x] Out[94]=Null
Продемонстрируем разницу между Unset ( =. ) и Clear (команда Unset работает только для выражения, точно соответствующего тому, которому присваивали; Clear работает для всех ассоциированных выражений):
In[95]:=f[x_]:=x2 ; f[x_,y_]=x+y; Definition[f ] Out[97]= f[x_]:=x2 f[x_,y_]=x+у In[98]:=f=. Definition[f ] Out[99]= f[x_]:=x2 f[x_,y_]=x+у In[100]:=f[y_]=. Definition[f] Out[101]= f[x_,y_]=x+y In[102]:=f [x_]:=x2 ; Definition[f ] Out[103]= f[x_,y_]=x+у f[x_]:=x2 In[104]:=Clear[f ] Definition[f] Out[105]=Null
Шаблоны (Pattern)
Шаблоны используются как для описания возможного вида аргументов функций, так и для выбора объекта из списка.
Шаблоны для описания аргументов функций
Шаблон "_" (Blank[]) указывает на любой объект. Шаблон "x_" - на любой объект, которому, для обращения к нему, присвоено имя x:
In[106]:=f [x_]:=х2
Шаблон "_h " - любой объект, имеющий заголовок h:
In[107]:=fint[x_Integer]:=х2 {fint[2],fint[l/2],fint[x]} Out[108]={4,fint[1/2],fint[x]}
Шаблон "s:obj" - объекты вида obj, которым приписано имя s:
In[109]:=fobj[x:{-,-}]:=x[[l]]+x[[2]] {fobj[{l,2}],fobj[{l,2,3}],fobj[x]} Out[110]={3,fobj[{l,2,3}],fobj[x]}
Шаблон "_ _" ( BlankSequence[] ) - любая последовательность, состоящая из одного или более выражений:
In[111]:=fseq[x_]:={x}2 fseq[3] fseq[3, 5] Out[112]={9} Out[113]= fseq[3, 5] In[114]:=Clear [fseq] fseq[x__]:={x}2 fseq[3] fseq[3,5] Out[116]={9} Out[117]={9,25}
Шаблон "_ _ _" ( BlankNullSequence[] ) - любая последовательность, состоящая из нуля или более выражений (в приведенном ниже примере <> обозначает объединение (конкатенацию) строк, а ToString[expr] превращает выражение expr в соответствующую строку):
In[118]:=fnulseq[x___]:="число аргументов равно "<> ToString[Length[{х}]] fnulseq[] fnulseq[3] fnulseq[3,5] Out[119] = число аргументов равно 0 Out[200] = число аргументов равно 1 Out[l2l] = число аргументов равно 2
Шаблон Repeated[p] или "p.." обозначает так называемую последовательность ( Sequence ) из одного или более аргументов, каждый из которых соответствует шаблону (Pattern) p. Шаблон RepeatedNull[p] или "p..." обозначает последовательность ( Sequence ) из нуля или более аргументов, каждый из которых соответствует шаблону (Pattern) p.
In[122]:=fpat[x:{_,_}..]:=Plus@@{х} In[123]:=fpat[{xl,х2},{yl,у2},{zl,z2}] Out[123]={xl+yl+zl,x2+y2+z2} In[124]:=fpat[{xl,x2},y,{zl,z2}] Out[124]=fpat[{xl,x2},y,{zl,z2}] In[125]:=fpat[{xl,x2},{yl,y2},{{zll,zl2},z2}] Out[125]={{xl+yl+zll,xl+yl+zl2},x2+y2+z2}