File: maxima_26.html

package info (click to toggle)
maxima 5.47.0-9
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 193,104 kB
  • sloc: lisp: 434,678; fortran: 14,665; tcl: 10,990; sh: 4,577; makefile: 2,763; ansic: 447; java: 328; python: 262; perl: 201; xml: 60; awk: 28; sed: 15; javascript: 2
file content (248 lines) | stat: -rw-r--r-- 12,774 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Maxima Manual: Синтаксис</title>

<meta name="description" content="Maxima Manual: Синтаксис">
<meta name="keywords" content="Maxima Manual: Синтаксис">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="maxima_toc.html#Top" rel="start" title="Top">
<link href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" rel="index" title="Указатель функций и переменных">
<link href="maxima_toc.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="maxima_19.html#g_t_0412_044b_0440_0430_0436_0435_043d_0438_044f" rel="up" title="Выражения">
<link href="maxima_27.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_0434_043b_044f-_0432_044b_0440_0430_0436_0435_043d_0438_0439" rel="next" title="Функции и переменные для выражений">
<link href="maxima_25.html#g_t_041d_0435_0440_0430_0432_0435_043d_0441_0442_0432_0430" rel="previous" title="Неравенства">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
body {color: black; background: white;  margin-left: 8%; margin-right: 13%;
      font-family: "FreeSans", sans-serif}
h1 {font-size: 150%; font-family: "FreeSans", sans-serif}
h2 {font-size: 125%; font-family: "FreeSans", sans-serif}
h3 {font-size: 100%; font-family: "FreeSans", sans-serif}
a[href] {color: rgb(0,0,255); text-decoration: none;}
a[href]:hover {background: rgb(220,220,220);}
div.textbox {border: solid; border-width: thin; padding-top: 1em;
    padding-bottom: 1em; padding-left: 2em; padding-right: 2em}
div.titlebox {border: none; padding-top: 1em; padding-bottom: 1em;
    padding-left: 2em; padding-right: 2em; background: rgb(200,255,255);
    font-family: sans-serif}
div.synopsisbox {
    border: none; padding-top: 1em; padding-bottom: 1em; padding-left: 2em;
    padding-right: 2em; background: rgb(255,220,255);}
pre.example {border: 1px solid rgb(180,180,180); padding-top: 1em;
    padding-bottom: 1em; padding-left: 1em; padding-right: 1em;
    background-color: rgb(238,238,255)}
div.spacerbox {border: none; padding-top: 2em; padding-bottom: 2em}
div.image {margin: 0; padding: 1em; text-align: center}
div.categorybox {border: 1px solid gray; padding-top: 1em; padding-bottom: 1em;
    padding-left: 1em; padding-right: 1em; background: rgb(247,242,220)}
img {max-width:80%; max-height: 80%; display: block; margin-left: auto; margin-right: auto}

-->
</style>

<link rel="icon" href="figures/favicon.ico">
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6>"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
</head>

<body lang="ru" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="g_t_0421_0438_043d_0442_0430_043a_0441_0438_0441"></a>
<div class="header">
<p>
Next: <a href="maxima_27.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_0434_043b_044f-_0432_044b_0440_0430_0436_0435_043d_0438_0439" accesskey="n" rel="next">Функции и переменные для выражений</a>, Previous: <a href="maxima_25.html#g_t_041d_0435_0440_0430_0432_0435_043d_0441_0442_0432_0430" accesskey="p" rel="previous">Неравенства</a>, Up: <a href="maxima_19.html#g_t_0412_044b_0440_0430_0436_0435_043d_0438_044f" accesskey="u" rel="up">Выражения</a> &nbsp; [<a href="maxima_toc.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" title="Index" rel="index">Index</a>]</p>
</div>
<a name="Sintaksis"></a>
<h3 class="section">6.7 Синтаксис</h3>

<p>Возможно определять новые операторы с заданным приоритетом,
удалять определения существующих операторов
или переопределять приоритет существующих операторов.  
Оператор может быть унарным префиксным или унарным постфиксным, 
бинарным инфиксным, n-арным (n-ary) инфиксным, матчфиксным (matchfix) 
или безфиксным (nofix).
Матчфиксный (matchfix) обозначает пару символов, которые заключают между собой свой 
аргумент или аргументы,
а безфиксный (nofix) означает оператор, который не принимает аргументы.
Следующие примеры демонстрируют различные типы операторов.
</p>
<dl compact="compact">
<dt>унарный префиксный</dt>
<dd><p>изменение знака <code>- a</code>
</p></dd>
<dt>унарный постфиксный</dt>
<dd><p>факториал <code>a!</code>
</p></dd>
<dt>бинарный инфиксный</dt>
<dd><p>экспонента <code>a^b</code>
</p></dd>
<dt>n-арный инфиксный</dt>
<dd><p>сложение <code>a + b</code>
</p></dd>
<dt>матчфиксный</dt>
<dd><p>список <code>[a, b]</code>
</p></dd>
</dl>

<p>(Встроенных безфиксных операторов нет;
для примера такого оператора см. <code>nofix</code>.)
</p>
<p>Механизм определения нового оператора прост.
Необходимо только объявить функцию как оператор;
сама функция оператора может быть определена или нет.
</p>
<p>Вот пример определенных пользователем операторов.
Заметим, что явный вызов функции <code>&quot;dd&quot; (a)</code> эквивалентен 
<code>dd a</code>, также как <code>&quot;&lt;-&quot; (a, b)</code> эквивалентно <code>a &lt;- b</code>.
Заметим также, что функции <code>&quot;dd&quot;</code> и <code>&quot;&lt;-&quot;</code> не определены в этом 
примере.
</p>
<div class="example">
<pre class="example">(%i1) prefix (&quot;dd&quot;);
(%o1)                          dd
(%i2) dd a;
(%o2)                         dd a
(%i3) &quot;dd&quot; (a);
(%o3)                         dd a
(%i4) infix (&quot;&lt;-&quot;);
(%o4)                          &lt;-
(%i5) a &lt;- dd b;
(%o5)                      a &lt;- dd b
(%i6) &quot;&lt;-&quot; (a, &quot;dd&quot; (b));
(%o6)                      a &lt;- dd b
</pre></div>

<p>Maxima функции, которые определяют новые операторы, сведены в нижеследующей таблице,
с установленными по умолчанию левыми и правыми степенями связывания (lbp и rbp, соответственно).
(Степень связывания определяет приоритет операторов. Однако, так как левые 
и правые степени связывания могут отличаться, степень связывания - это что-то более сложное чем приоритет.)
Некоторые функции определения операций принимают дополнительные аргументы,
см. описания этих функций для более полного описания деталей.
</p>
<dl compact="compact">
<dt><code>prefix</code></dt>
<dd><p>rbp=180
</p></dd>
<dt><code>postfix</code></dt>
<dd><p>lbp=180
</p></dd>
<dt><code>infix</code></dt>
<dd><p>lbp=180, rbp=180
</p></dd>
<dt><code>nary</code></dt>
<dd><p>lbp=180, rbp=180
</p></dd>
<dt><code>matchfix</code></dt>
<dd><p>(степень связывания не применима)
</p></dd>
<dt><code>nofix</code></dt>
<dd><p>(степень связывания не применима)
</p></dd>
</dl>

<p>Для сравнения, приведем некоторые встроенные операторы, и их левые и правые 
степени связывания.
</p>
<div class="example">
<pre class="example">Operator   lbp     rbp

  :        180     20 
  ::       180     20 
  :=       180     20 
  ::=      180     20 
  !        160
  !!       160
  ^        140     139 
  .        130     129 
  *        120
  /        120     120 
  +        100     100 
  -        100     134 
  =        80      80 
  #        80      80 
  &gt;        80      80 
  &gt;=       80      80 
  &lt;        80      80 
  &lt;=       80      80 
  not              70 
  and      65
  or       60
  ,        10
  $        -1
  ;        -1
</pre></div>

<p><code>remove</code> и <code>kill</code> удаляют свойства оператора из атома.
<code>remove (&quot;<var>a</var>&quot;, op)</code> удаляет только свойства оператора <var>a</var>.
<code>kill (&quot;<var>a</var>&quot;)</code> удаляет все свойства <var>a</var>, включая свойства
оператора.
Заметим, что имя оператора должно быть взято в кавычки.
</p>
<div class="example">
<pre class="example">(%i1) infix (&quot;@&quot;);
(%o1)                           @
(%i2) &quot;@&quot; (a, b) := a^b;
                                     b
(%o2)                      a @ b := a
(%i3) 5 @ 3;
(%o3)                          125
(%i4) remove (&quot;@&quot;, op);
(%o4)                         done
(%i5) 5 @ 3;
Incorrect syntax: @ is not an infix operator
5 @
 ^
(%i5) &quot;@&quot; (5, 3);
(%o5)                          125
(%i6) infix (&quot;@&quot;);
(%o6)                           @
(%i7) 5 @ 3;
(%o7)                          125
(%i8) kill (&quot;@&quot;);
(%o8)                         done
(%i9) 5 @ 3;
Incorrect syntax: @ is not an infix operator
5 @
 ^
(%i9) &quot;@&quot; (5, 3);
(%o9)                        @(5, 3)
</pre></div>

<a name="Item_003a-Expressions_002fnode_002f_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_0434_043b_044f-_0432_044b_0440_0430_0436_0435_043d_0438_0439"></a><hr>
<div class="header">
<p>
Next: <a href="maxima_27.html#g_t_0424_0443_043d_043a_0446_0438_0438-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0435-_0434_043b_044f-_0432_044b_0440_0430_0436_0435_043d_0438_0439" accesskey="n" rel="next">Функции и переменные для выражений</a>, Previous: <a href="maxima_25.html#g_t_041d_0435_0440_0430_0432_0435_043d_0441_0442_0432_0430" accesskey="p" rel="previous">Неравенства</a>, Up: <a href="maxima_19.html#g_t_0412_044b_0440_0430_0436_0435_043d_0438_044f" accesskey="u" rel="up">Выражения</a> &nbsp; [<a href="maxima_toc.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="maxima_264.html#g_t_0423_043a_0430_0437_0430_0442_0435_043b_044c-_0444_0443_043d_043a_0446_0438_0439-_0438-_043f_0435_0440_0435_043c_0435_043d_043d_044b_0445" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>