Опубликован: 27.12.2010 | Уровень: специалист | Доступ: платный
Лекция 4:

Детализация

Просмотр определений. Разница между 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}
Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары