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

Детализация

Заголовок выражения

Заголовок выражения f[x, y, ...] - это f, заголовки атомарных объектов называются их типами.

In[23]:=Head[f [х, у] ]
Out[23] = f
In[24]: = Head[x + у]
Out[24] = Plus

Типы атомарных объектов:

  • целые числа - Integer ;
  • рациональные числа - Rational ;
  • вещественные числа - Real ;
  • комплексные числа - Complex ;
  • символы - Symbol ;
  • строки - String.
In[25]:= {Head[l] ,  FullFormfl]}
         {Head[l/2], FullForm[l / 2] } 
         {Head[l.l],  FullForm[l.l] } 
         {Head[l + i], FullForm[l+ i]} 
         {Head[x],  FullForm[x]} 
         {Head["abc"],  FullForm["abc"]}
Out[25]= {Integer,   1}
Out[26]= {Rational,  Rational [1,  2]}
Out[27]= {Real,   1.1'}
Out[28] = {Complex,  Complex[l,   1]}
Out[29] = {Symbol,  x}
Out[30]= {String,   "abc"}

Интересный пример. Сравните:

In[31] : = {Head [x + i] ,  FullForm [x + u] } 
Out[31]= {Plus,  Plus [Complex [0,   1],  x] }

Замена заголовка. Осуществляется командой Apply или @@:

In[32]: = Apply[g, f[x,у]]
Out[32] = g[x, у]
In[33]: = Head[{a,b,с,d}]
Out[33] = List
In[34]: = Apply[Plus,{a,b,c,d}] 
Out[34] =a+b+c+d 
In[35]:=Plus@@{a,b,c,d}
Out[35] = a + b + с + d

Команда Apply не действует на атомарных объектах:

In[36]: = х = Apply [List,  l]
Out[36] = 1
In[37]: = Head[x]
Out[37] = Integer
In[38]: = х = Apply [List,  1/2]
Out[38] = 1/2
In[39]:=Head[x] 
Out[39]= Rational 
In[40]: = x = . 
In[41]:=Head[x]
Out[41] = Symbol

Преобразование типов атомарных объектов

Важно уметь переходить от одного типа к другому.

Команда IntegerString[integer] преобразует целое число integer в строку (знак игнорируется):

In[42]:= IntegerString [25 361]  // InputForm
Out[42] = "25361"

Команда FromDigits[str] преобразует строку цифр в целое число, а также список цифр в целое число. Чтобы преобразовать число в список цифр, можно использовать команду IntegerDigits:

In[43] :=FromDigits ["43476"]
         FromDigits[{5,  2,  3,  8}] 
         IntegerDigits[374 632]
Out[43] = 43476
Out[44] = 52 3 8
Out[45]={3, 7, 4, 6, 3, 2}

Команда ToString[expr] преобразует выражение expr в строку. При этом форму вывода form можно указать в качестве второго аргумента: ToString[expr,form]:

In[46] := ToString [x2]
          ToString[x2]  // InputForm
Out[46] = 2
Out[47] = "2\nx"
In[48]:=ToString [x2 , InputForm]
        ToString[x2, InputForm] // InputForm
Out[48]=x^2 
Out[49] ="х^2"

Команда ToExpression[str] преобразует строку в соответствующее выражение. Модифицированная команда ToExpression[str,form] преобразует строку в выражение, используя при этом правило вывода form:

In[50] := ToExpression [ "Sin [x] "]
Out[50]= Sin [x]
In[51] := ToExpression [ "sin (x) " ,  TraditionalForm]
Out[51] = Sin [x]
In[52] := ToExpression [ "\sin (x) ", TeXForm]
Out[52] = Sin [x]

Команда Symbol[str] превращает строку в символ:

In[53]:= Symbol ["х"]
Out[53]=x

Строка из 10 символов:

In[54] := Table [Symbol ["x" <> ToStringfi]] , {i, 10}]
Out[54]={xl,  х2,  хЗ,  х4,  х5,  хб,  х7,  х8,  х9,  х10}
In[55] := Table [ToExpression ["х" <> ToString[i] ] , {i, 10}]
Out[55]={xl,  x2,  хЗ,  х4,  х5,  хб,  x7,  x8,  x9,  x10}

Команда SymbolName[symbol] превращает символ symbol в строку - имя этого символа:

In[56] := SymbolName [х]  // InputForm
Out[56] = "x"

Доступ к фрагментам выражения

Доступ к фрагментам выражения осуществляется как к элементам списка (заголовок Head - нулевой элемент):

In[57]:= TreeForm [\frac{x+y-zw}{a+(b-c)^{\frac12}}]

In[58]:=\left \{ \left ( \frac{x+y-zw}{a+(b-c)^{\frac 12}} \right ) [[0]], \left ( \frac{x+y-zw}{a+(b-c)^\frac12 \right )[[1]], \left ( \frac{x+y-zw}{a+(b-c)^\frac 12}\right ) [[2]],
\begin{matrix}
&&\left ( \frac{x+y-zw}{a+(b-c)^ \frac 12} \right ) [[3]] \right \} 
\end{matrix}\\
Part::partw: Part\; 3\; of \frac{x+y-wz}{a+ \sqrt{b-c}} does\; not\; exist. >>\\
Out[58] = \left \{Times,  \frac{1}{a+ \sqrt{b-c}}, x+y-zw, \frac{x+y-zw}{a+ \sqrt{b-c}} [[3]] \right \}
In[59]:=TreeForm \left [ \left ( \frac{x+y-zw}{a+(b-c)^{\frac 12}} \right ) [[2]] \right ]

In[60]:=\left \{ \left ( \frac{x+y-zw}{a+(b-c)^{ \frac 12} \right ) [[2,1]], \left ( \frac{x+y-zw}{a+(b-c)^{\frac 12}} \right )[[2,2]], \left ( \frac{x+y-zw}{a+(b-c)^{\frac 12}} \right ) [[2,3]],\\
\begin{matrix}
&&&\left ( \frac {x+y-zw}{a+(b-c)^{\frac 12}} \right ) [[2,4]] \right \}\\
\end{matrix}
Patt::partw: Part 4 of x + y-wz does not exist. >>
Out[60]=\left \{x,   y,   -wz, \frac{x+y-zw}{a+\sqrt {b-c}} [[2,   4]] \right \}
Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары