Детализация
Выражения - универсальный конструктор в Mathematica
Напомним, что f[x,y,...] - универсальный (канонический) вид выражения, где x, y,... могут быть выражениями или атомарными объектами (числами, символами, строками).
Последовательность аргументов x, y, ... называется Sequence.
In[1] :=f [Sequence [x,у,z] ] Out[1]=f[x,y,z] In[2]:=f [x, Sequence [y,z],w] Out[2] = f [x,y,z,w]
f называется заголовком ( Head ) выражения f[x, y, ...]. Заголовок f может быть как символом, так и более сложным выражением (в приведенных ниже примерах заголовки - это f[2] и (a+b) ):
In[3]:=f [2][х,у] (а + Ь)[х] Out[3] =f[2][х, у] Out[4] =(а+b)[х]
Еще пример: заголовком является InterpolatingFunction[{{0.,3.}},<>] (команда First - взятие первого элемента списка):
In[5]:= у/.First[NDSolve[{y''[х] == -у[х], у[0] == у'[0]==2} , y,{х,0,3}]] f[x] f[2.3] Plot[f[x],{x,0,3}] Out[5] =InterpolatingFunction [{{0.,3.}}, <>] Out[6] =InterpolatinqFunction [{f0.,3.}}, <>][х] Out[7] =0.158858
In[9] := Clear [f]
Команда FullForm позволяет представить выражение в каноническом виде:
![In[10]:=FullForm [\frac{x+y-zw)}{a+(b-c)^{\frac12}}]](/sites/default/files/tex_cache/0763ab3fafc3f98e9a583ec2e191c32d.png)
Out[10] = Times[Power[ Plus[a,Power[Plus [b, Times[-1, c]],Rational[1, 2]]], -1],Plus[x,y,Times[-1,w,z]]]
Выражения имеют структуру дерева:
![In[11]:= TreeForm[\frac{x+y-zw}{a+(b-c))^{\frac12}}]](/sites/default/files/tex_cache/c413ee6ad55e340dc81b3c57a6e578bd.png)
Список, как частный случай выражения, тоже имеет структуру дерева:
In[12]:=TreeForm[{a,{b,с},d}]
Если в одной скобке стоит последовательность выражений , разделенных точкой с запятой, то на самом деле там имеется одно выражение
. Например, последовательность выражений
In[13]:=х=2; у=х2; y 0ut[14]=4
представляет собой одно выражение
In[15]:=CompoundExpression[х=2,у=х2,у] Out[15]=4 In[16]:=Clear[x,у]
Уровни выражения expr
Каждое выражение разбито на уровни. Посмотреть на них можно с помощью команды Level[expr,levelspec], где levelspec описывает интересующие уровни:
![In[17]:=TreeForm [\frac{x+y-zw}{a+(b-c)^{\frac12}}]](/sites/default/files/tex_cache/d80fd779c57f60b0a1339c7b65fd7b87.png)
![In[18]:= Table [Level \left [ \frac{x+y-zw}{a+(b-c)^{\frac 12}} , \{i\}\right ], \{i, 0, 7\}]\\
Out[18] =\\
\left \{ \left \{ \frac{x+y-wz}{a+\sqrt{b-c}}\right \},\left \{ \frac{1}{a+\sqrt{b-c}}, x+y-wz \right \}, \{a+\sqrt{b-c}, -1 x, y, -wz\},\\
\begim{matrix}
&\{a, \sqrt{b-c}, -1, w,z\}, \{b-c, \frac 12\}, \{b, -c\}, \{-1, c\}, \{\}\}
\end{matrix}](/sites/default/files/tex_cache/7282a595c0c43043a34a232f7ae9a610.png)
levelspec ={n} - только n -й уровень (нулевой уровень - само выражение):
![In[l9]: = Level \left [ \frac{x+y-zw}{a+(b-c)^{\frac 12}}, \{3\} \right]\\
Out[l9]=\{a, \sqrt{b - с} , -1, w, z\}](/sites/default/files/tex_cache/e067f9108a06566b578291384b87f161.png)
levelspec = n - все уровни от 1-го до n -го (нулевой уровень не включен):
![In[20]: = Level \left [ \frac{x+y-zw}{a+(b-c)^{\frac 12}}, 3\right]\\
Out[20] = \{a, \sqrt{b - с} , а + \sqrt{b - с} , -1,\\
\begin{matrix}
&&&\frac{1}{a+\sqrt{b-c}^{\frac 12}}, х, у, -1, w, z, -w z, x+y-wz\}
\end{matrix}](/sites/default/files/tex_cache/351fb3ff9eec861d737e750e02bd079a.png)
levelspec = {n, m} - уровни с номерами между n и m:
![In[21]:= Level \left [\frac{x+y-zw}{a+(b-c)^{\frac 12}}, \{3, 5\}]](/sites/default/files/tex_cache/227f2fef93a3909af6b88dc1d726eb80.png)
![Out[21] = \{а, b, -с, b - с, \frac 12, \sqrt{b - с} , -1, w, z\}](/sites/default/files/tex_cache/5f19f97a8427b8f778208122d4bd3615.png)
levelspec = {n, Infinity} - уровни с номерами, не меньшими, чем n:
![In[22]: = Level \left [ \frac{x+y-zw}{a+(b-c)^{\frac 12}} , \{0, Infinity\} \right]\\
Out[22] =\{a, b, -1, с, -с, b - с, \frac 12, \sqrt{b - с} , a + \sqrt{b - с} , -1,\\
\begin{matrix}
&&&\frac{1}{a+\sqrt{b-c}}, x, у, -1, w, z, -wz, x + y-wz, \frac{x+y-wz}{a+\sqrt{b-c}}\}
\end{matrix}](/sites/default/files/tex_cache/89b610dd93257d5270a4239b236c5172.png)