Rename specvar integer-info to *integer-info*
[maxima.git] / doc / info / de / Program.de.texi
blobb047ba62ffaf4b540419e2ebb99e6a8e873948a6
1 @c -----------------------------------------------------------------------------
2 @c File        : Program.de.texi
3 @c License     : GNU General Public License (GPL)
4 @c Language    : German
5 @c Original    : Program.texi revision 25.07.2011
6 @c Translation : Dr. Dieter Kaiser
7 @c Date        : 14.11.2010
8 @c Revision    : 10.12.2011
9 @c 
10 @c This file is part of Maxima -- GPL CAS based on DOE-MACSYMA
11 @c -----------------------------------------------------------------------------
13 @menu
14 * Lisp und Maxima::
15 * Einf@"uhrung in die Programmierung::
16 * Funktionen und Variablen der Programmierung::
17 @end menu
19 @c -----------------------------------------------------------------------------
20 @node Lisp und Maxima, Einf@"uhrung in die Programmierung, Programmierung, Programmierung
21 @section Lisp und Maxima
22 @c -----------------------------------------------------------------------------
24 @subheading Lisp- und Maxima-Bezeichner
26 Maxima ist in Lisp programmiert.  Es ist einfach, Lisp-Funktionen und
27 Lisp-Variable in Maxima zu verwenden.  Umgekehrt k@"onnen Maxima-Funktionen und
28 Maxima-Variablen in Lisp verwendet werden.  Ein Lisp-Symbol, das mit einem 
29 Dollarzeichen @code{$} beginnt, entspricht einem Maxima-Symbol ohne einem 
30 Dollarzeichen.  Umgekehrt entspricht einem Maxima-Symbol, das mit einem 
31 Fragezeichen @code{?} beginnt, ein Lisp-Symbol ohne das Fragezeichen.
32 Zum Beispiel entspricht dem Maxima-Symbol @code{foo} das Lisp-Symbol 
33 @code{$foo} und dem Maxima-Symbol @code{?foo} entspricht das Lisp-Symbol
34 @code{foo}.
36 Speziellen Zeichen wie einem Trennstrich @code{-} oder einem Stern @code{*} in
37 Lisp-Symbolen muss ein Backslash @code{\} vorangestellt werden, um diese
38 in Maxima zu verwenden.  Zum Beispiel entspricht dem Lisp-Symbol 
39 @code{*foo-bar*} das Maxima-Symbol @code{?\*foo\-bar\*}.
41 Im Gegensatz zu Lisp unterscheidet Maxima Gro@ss{}- und Kleinschreibung.  Es 
42 gibt einige Regeln, die eine @"Ubersetzung von Namen zwischen Lisp und Maxima 
43 betreffen:
45 @enumerate
46 @item
47 Ein Lisp-Bezeichner, der nicht von senkrechten Strichen eingeschlossen ist,
48 entspricht einem klein geschriebenen Maxima-Bezeichner.  Die Schreibweise des
49 Lisp-Bezeichners wird dabei ignoriert.  Zum Beispiel entspricht den folgenden
50 Lisp-Bezeichnern @code{$foo}, @code{$FOO} und @code{$Foo} jeweils der
51 Maxima-Bezeichner @code{foo}.
53 @item
54 Ein Lisp-Bezeichner, der vollst@"andig gro@ss{} oder klein geschrieben ist und 
55 von senkrechten Strichen eingeschlossen wird, entspricht einem Maxima-Bezeichner
56 in der umgekehrten Schreibweise.  Ein klein geschriebener Lisp-Bezeichner wird 
57 also zu einem gro@ss{}geschriebenen Maxima-Bezeichner und umgekehrt.  Zum 
58 Beispiel entsprechen den Lisp-Bezeichnern @code{|$FOO|} und @code{|$foo|} die
59 Maxima-Bezeichner @code{foo} und @code{FOO}.
61 @item
62 Ein Lisp-Bezeichner in gemischter Schreibweise, der von senkrechten Strichen
63 eingeschlossen ist, entspricht einem Maxima-Bezeichner in der gleichen
64 Schreibweise.  Zum Beispiel entspricht dem Lisp-Bezeichner @code{|$Foo|} der
65 Maxima-Bezeichner @code{Foo}.
66 @end enumerate
68 F@"ur die Syntax von Maxima-Bezeichnern siehe auch @ref{Bezeichner}.
70 @subheading Ausf@"uhrung von Lisp-Code in Maxima
72 Lisp-Code kann mit dem Unterbrechungskommando @code{:lisp} von einer
73 Maxima-Kom@-man@-do@-zei@-le ausgef@"uhrt werden.  Siehe
74 @ref{Debugger-Kommandos} f@"ur weitere Unterbrechungskommandos und deren
75 Beschreibung.
77 Beispiele:
79 Addiere die Werte der Maxima-Variablen @code{x} und @code{y} mit dem 
80 Lisp-Operator @code{+}.
82 @example
83 (%i1) x:10$ y:5$
84 (%i3) :lisp (+ $x $y)
86 @end example
88 Addiere die Symbole @code{a} und @code{b} mit der Lisp-Funktion @code{ADD}.  Das
89 Ergebnis wird der Variablen @code{$RES} zugewiesen.  Die Variable hat in Maxima
90 den Namen @code{res}.
92 @example
93 (%i3) :lisp (setq $res (add '$a '$b))
94 ((MPLUS SIMP) $A $B)
95 (%i3) res;
96 (%o3)                         b + a
97 @end example
99 Das @code{:lisp}-Kommando ist n@"utzlich, um zum Beispiel Lisp-Eigenschaften
100 von Maxima-Symbolen anzuzeigen, globale Lisp-Variablen wie
101 @code{*PRINT-CIRCLE*} zu setzen oder wie im letzten Beispiel die interne
102 Form von Maxima-Ausdr@"ucken anzuzeigen.
104 @example
105 (%i4) :lisp (symbol-plist 'mabs)
106 (TEXSYM ((\left| ) \right| ) TEX TEX-MATCHFIX REAL-VALUED T
107         MAPS-INTEGERS-TO-INTEGERS T DIMENSION DIM-MABS TRANSLATE
108         #<FUNCTION (LAMBDA #) @{972D045@}> FLOATPROG MABSBIGFLOAT INTEGRAL
109         ((X) #<FUNCTION ABS-INTEGRAL>) OPERATORS SIMPABS DISTRIBUTE_OVER
110         (MLIST $MATRIX MEQUAL) NOUN $ABS REVERSEALIAS $ABS GRAD
111         ((X) ((MTIMES) X ((MEXPT) ((MABS) X) -1))))
113 (%i4) :lisp (setq *print-circle* nil)
116 (%i4) 'integrate(t*sin(t), t);
117 @group
118                           /
119                           [
120 (%o4)                     I t sin(t) dt
121                           ]
122                           /
123 @end group
124 (%i5) :lisp $%
125 ((%INTEGRATE SIMP) ((MTIMES SIMP) $T ((%SIN SIMP) $T)) $T)
126 @end example
128 Das Kommando @code{:lisp} kann in einer Kommandozeile und in Dateien verwendet
129 werden, die mit den Funktionen @mref{batch} oder @mref{demo} geladen werden.
130 Dagegen kann das Kommando @code{:lisp} nicht in Dateien verwendet werden, die 
131 mit den Funktionen @mrefcomma{load} @mrefcomma{batchload}@w{}
132 @mref{translate_file} oder @mref{compile_file} geladen werden.
134 @subheading Ausf@"uhrung von Maxima-Code in Lisp
136 Das Lisp-Makro @code{#$} erlaubt die Nutzung von Maxima-Ausdr@"ucken in 
137 Lisp-Code.  @code{#$@var{expr}$} wird zu einem Lisp-Ausdruck expandiert, der
138 dem Maxima-Ausdruck @var{expr} entspricht.
140 Beispiele:
142 Die beiden folgenden Beispiele zeigen die Zuweisung an eine Variable @code{var}.
143 Im ersten Beispiel werden Lisp- und Maxima-Code gemischt.  F@"ur die Zuweisung
144 an die Variable wird die Lisp-Funktion @code{MSETQ} aufgerufen.  Das Makro
145 @code{#$} transformiert den Maxima Ausdruck @code{sin(x) + a^2} in die Lisp-Form
146 @code{((MPLUS SIMP) ((MEXPT SIMP) $A 2) ((%SIN SIMP) $X))}.  Dies entspricht
147 dem im zweiten Beispiel gezeigten Maxima-Kommando.
149 @example
150 (%i1) :lisp (msetq $var #$sin(x)+a^2$)
151 ((MPLUS SIMP) ((MEXPT SIMP) $A 2) ((%SIN SIMP) $X))
153 (%i1) var: sin(x)+a^2;
154 @group
155                                      2
156 (%o1)                      sin(x) + a
157 @end group
158 @end example
160 In diesem Beispiel wird zun@"achst ein Maxima-Ausdruck der Variablen @code{$VAR}
161 zugewiesen und dann mit der Lisp-Funktion @code{DISPLA} ausgegeben.
163 @example
164 (%i1) :lisp (setq $var #$'integrate(f(x), x)$)
165 ((%INTEGRATE SIMP) (($F SIMP) $X) $X)
166 (%i1) :lisp (displa $var)
169 I f(x) dx
173 @end example
175 Maxima-Funktionen sind keine Lisp-Funktionen.  Um eine Maxima-Funktion in 
176 Lisp-Code aufzurufen, kann die Lisp-Funktion @code{MFUNCALL} aufgerufen werden.
178 @example
179 (%i1) f(x,y) := x^2 + sin(y)$
180 (%i2) :lisp (mfuncall '$f '$a 10)
181 ((MPLUS SIMP) ((%SIN SIMP) 10) ((MEXPT SIMP) $A 2))
182 @end example
184 @subheading @"Offnen einer Lisp-Sitzung
186 Mit dem Kommando @code{to_lisp()} kann von einer Maxima-Kommandozeile eine
187 Lisp-Sitzung ge@"offnet werden.  Mit dem Kommando @code{(TO-MAXIMA)} wird
188 die Lisp-Sitzung beendet und nach Maxima zur@"uckgekehrt.  Siehe auch
189 @mref{to_lisp} f@"ur ein Beispiel.
191 Die folgenden Lisp-Funktionen k@"onnen in Maxima nicht verwendet werden:
193 @code{complement},
194 @code{continue},
195 @code{/},
196 @code{float},
197 @code{functionp},
198 @code{array},
199 @code{exp},
200 @code{listen},
201 @code{signum},
202 @code{atan},
203 @code{asin},
204 @code{acos},
205 @code{asinh},
206 @code{acosh},
207 @code{atanh},
208 @code{tanh},
209 @code{cosh},
210 @code{sinh},
211 @code{tan},
212 @code{break},
213 und @code{gcd}.
215 @c -----------------------------------------------------------------------------
216 @node Einf@"uhrung in die Programmierung, Funktionen und Variablen der Programmierung, Lisp und Maxima, Programmierung
217 @section Einf@"uhrung in die Programmierung
218 @c -----------------------------------------------------------------------------
220 In Maxima k@"onnen Programme geschrieben werden.  Alle Maxima-Funktionen und 
221 Maxima-Variablen k@"onnen in Programmen verwendet werden.  Maxima hat einen
222 @"Ubersetzer, um Maxima-Programme in Lisp-Programme zu @"ubersetzen, und einen
223 Compiler, um die @"ubersetzten Programme zu kompilieren.  Siehe dazu das Kapitel
224 @nrefdot{@"Ubersetzer}
226 Maxima-Programme bestehen aus Funktionen und Makros, die im Kapitel 
227 @nref{Funktionsdefinitionen} beschrieben sind.  Die Funktionen werden aus 
228 Ausdr@"ucken der Form @code{(expr_1, expr_2, ..., expr_n)} oder
229 @mref{block}-Anweisungen zusammengesetzt.  Mit der Anweisung @mref{local} werden
230 Variablen definiert, deren Werte und Eigenschaften lokal zu einem Block sind.
232 Konditionale Verzweigen werden mit der Anweisung @mref{if} definiert und haben 
233 die Form @code{if ... then ... else}.
235 Maxima kennt die sehr allgemeine Anweisung @mrefcomma{for} um Schleifen zu
236 programmieren.  Schl@"usselworte f@"ur die Programmierung von Schleifen sind
237 @mrefcomma{while} @mrefcomma{unless} @mref{do} sowie @code{thru}, @code{step},
238 @code{in}.
240 Mit der Sprunganweisung @mref{return} kann ein Block verlassen werden und mit
241 der Sprunganweisung @mref{go} wird innerhalb eines Blockes zu eine Marke
242 verzweigt.  Nicht-lokale R@"uckspr@"unge aus Funktionen werden mit den 
243 Anweisungen @mref{catch} und @mref{throw} programmiert.
245 Die Anweisung @mref{errcatch} f@"angt Fehler ab, so dass die Ausf@"uhrung eines
246 Programms nicht abgebrochen wird.  Mit der Anweisungen @mref{error} und
247 @mref{break} wird ein Programm abgebrochen.  Im ersten Fall kann eine
248 Fehlermelung ausgegeben werden und das Programm kehrt zur Maxima-Kommandozeile
249 zur@"uck.  Mit @code{break} wird der Maxima-Debugger gestartet.
251 Maxima kennt die folgenden Anweisungen und Variablen um Programme zu definieren:
253 @verbatim
254    backtrace    block        break
255    catch        do           eval_when
256    errcatch     error        error_size
257    error_syms   errormsg     for
258    go           if           local
259    return       throw        unless
260    while
261 @end verbatim
263 @c -----------------------------------------------------------------------------
264 @node Funktionen und Variablen der Programmierung,  , Einf@"uhrung in die Programmierung, Programmierung
265 @section Funktionen und Variablen der Programmierung
266 @c -----------------------------------------------------------------------------
268 @c --- 23.12.2010 DK -----------------------------------------------------------
269 @anchor{backtrace}
270 @deffn  {Funktion} backtrace ()
271 @deffnx {Funktion} backtrace (@var{n})
273 Gibt den Aufruf-Stack der Funktion zur@"uck, die ausgef@"uhrt wird.
275 Das Kommando @code{backtrace()} zeigt den gesamten Stack.
276 @code{backtrace(@var{n})} zeigt die letzten @var{n} Funktionen
277 einschlie@ss{}lich der Funktion, die ausgef@"uhrt wird.
279 @code{backtrace} kann in einer Batch-Datei, die zum Beispiel mit der Funktion
280 @mref{batch} geladen wird, in einer Funktion oder von einer Kommandozeile
281 aufgerufen werden.
283 Beispiele:
285 @code{backtrace()} gibt den gesamten Stack aus.
287 @example
288 (%i1) h(x) := g(x/7)$
289 (%i2) g(x) := f(x-11)$
290 (%i3) f(x) := e(x^2)$
291 (%i4) e(x) := (backtrace(), 2*x + 13)$
292 (%i5) h(10);
293 #0: e(x=4489/49)
294 #1: f(x=-67/7)
295 #2: g(x=10/7)
296 #3: h(x=10)
297                               9615
298 (%o5)                         ----
299                                49
300 @end example
302 @code{backtrace(@var{n})} gibt die letzten @var{n} Funktionen aus.
304 @example
305 (%i1) h(x) := (backtrace(1), g(x/7))$
306 (%i2) g(x) := (backtrace(1), f(x-11))$
307 (%i3) f(x) := (backtrace(1), e(x^2))$
308 (%i4) e(x) := (backtrace(1), 2*x + 13)$
309 (%i5) h(10);
310 #0: h(x=10)
311 #0: g(x=10/7)
312 #0: f(x=-67/7)
313 #0: e(x=4489/49)
314 @group
315                               9615
316 (%o5)                         ----
317                                49
318 @end group
319 @end example
320 @end deffn
322 @c --- 23.02.2011 DK -----------------------------------------------------------
323 @anchor{block}
324 @deffn  {Funktion} block ([@var{v_1}, @dots{}, @var{v_m}], @var{expr_1}, @dots{}, @var{expr_n})
325 @deffnx {Funktion} block (@var{expr_1}, @dots{}, @var{expr_n})
327 Mit der Anweisung @code{block} werden Ausdr@"ucke in einer lokalen Umgebung
328 zusammengefasst.  @code{block} wertet die Argument @var{expr_1}, @var{expr_2},
329 @dots{}, @var{expr_n} nacheinander aus und gibt das Ergebnis des letzten
330 ausgewerteten Ausdrucks zur@"uck.  Die Liste @code{[v_1, ..., v_m]} am Anfang
331 der @code{block}-Anweisung bezeichnet Variablen, die innerhalb der
332 @code{block}-Anweisung lokal sind.  Alle anderen Variablen, die in einem Block
333 verwendet werden, beziehen sich auf globale Variablen, die außerhalb des Block
334 definiert sind.  Dies kann ein weiterer Block oder die globale Maxima-Umgebung
335 sein.  @code{block} sichert die aktuellen Werte der Variablen @var{v_1}, 
336 @dots{}, @var{v_m}.  Wird @code{block} verlassen, werden diese Werte
337 wiederhergestellt.
339 Die Deklaration @code{local(@var{v_1}, ..., @var{v_m})} innerhalb der
340 @code{block}-Anweisung sichert nicht nur die Werte, sondern auch die
341 Eigenschaften der Variablen wie sie zum Beispiel mit den Funktionen
342 @mref{declare} oder @mref{depends} definiert werden.  Erhalten die mit
343 @code{local} deklarierten Variablen innerhalb der @code{block}-Anweisung
344 Eigenschaften, wirken sich diese nur lokal aus.  Beim Verlassen der
345 @code{block}-Anweisung werden die globalen Eigenschaften wiederhergestellt.
346 Siehe auch @mrefdot{local}
348 Die @code{block}-Anweisung kann verschachtelt werden.  Jeder Block kann
349 eigene lokale Variablen definieren.  Diese sind global zu jedem anderen Block
350 der sich innerhalb des Blockes befindet.  Ein Variable die nicht als lokal
351 definiert ist, hat den globalen Wert eines umgebenden Blocks oder den Wert der
352 globalen Maxima-Umgebung.
354 Der R@"uckgabewert eines Blocks ist der Wert des letzten Ausdrucks oder der 
355 Wert, der mit den @code{return}-Anweisung zur@"uckgegeben wird.  Mit der 
356 @code{go}-Anweisung kann innerhalb eines Blocks zu einer Marke gesprungen 
357 werden.  Weiterhin kann mit der @mref{throw}-Anweisung ein nicht-lokaler
358 R@"ucksprung zu einer entsprechenden @mref{catch}-Anweisung erfolgen.
360 Bl@"ocke erscheinen typischerweise auf der rechten Seite einer 
361 Funktionsdefinitionen.  Sie k@"onnen aber auch an anderen Stellen verwendet
362 werden.
364 Beispiel:
366 Das Beispiel zeigt eine einfache Implementation des Newton-Algorithmus.  Der
367 Block definiert die lokalen Variablen @code{xn}, @code{s} und @var{numer}.
368 @mref{numer} ist eine Optionsvariable, die im Block einen lokalen Wert erh@"alt.
369 Im Block ist das Tag @code{loop} definiert.  Zu diesem Tag wird mit der
370 Anweisung @code{go(loop)} gesprungen.  Der Block und damit die Funktion wird
371 mit der Anweisung @code{return(xn)} verlassen.  Der Wert der Variablen @code{xn}
372 ist das Ergebnis der Funktion @code{newton}.
374 @example
375 newton(exp,var,x0,eps):=
376    block([xn,s,numer],
377       numer:true,
378       s:diff(exp,var),
379       xn:x0,
380    loop,
381       if abs(subst(xn,var,exp))<eps then return(xn),
382       xn:xn-subst(xn,var,exp)/subst(xn,var,s),
383       go(loop) )$
384 @end example
385 @end deffn
387 @c --- 27.12.2010 DK -----------------------------------------------------------
388 @anchor{break}
389 @deffn {Funktion} break (@var{expr_1}, @dots{}, @var{expr_n})
391 Wertet die Ausdr@"ucke @var{expr_1}, @dots{}, @var{expr_n} aus, zeigt die 
392 Ergebnisse an und f@"uhrt dann eine Unterbrechung aus.  Mit dem Kommando 
393 @code{exit;} wird Maxima fortgesetzt.  Siehe das Kapitel
395 Beispiel:
397 Der Variablen @code{a} wird der Wert 2 zugewiesen.  Dann wird die Unterbrechung
398 ausgef@"uhrt.  Mit dem Kommando @code{exit;} wird Maxima fortgesetzt.
400 @example
401 (%i1) break(a:2);
404 Entering a Maxima break point. Type 'exit;' to resume.
407 _exit;
408 (%o1)                           2
409 @end example
410 @end deffn
412 @c --- 27.12.2010 DK -----------------------------------------------------------
413 @anchor{catch}
414 @deffn {Funktion} catch (@var{expr_1}, @dots{}, @var{expr_n})
416 @c Evaluates @var{expr_1}, ..., @var{expr_n} one by one; if any leads to the 
417 @c evaluation of an expression of the form @code{throw (arg)}, then the value of
418 @c the @code{catch} is the value of @code{throw (arg)}, and no further 
419 @c expressions are evaluated. This "non-local return" thus goes through any 
420 @c depth of nesting to the nearest enclosing @code{catch}. If there is no 
421 @c @code{catch} enclosing a @code{throw}, an error message is printed.
423 Wertet die Ausdr@"ucke @var{expr_1}, @dots{}, @var{expr_n} nacheinander aus.
424 Wertet irgendeiner der Ausdr@"ucke zu @code{throw(arg)} aus, dann ist das 
425 Ergebnis der Wert von @code{throw(arg)} und es werden keine weiteren Ausdr@"ucke
426 ausgewertet.  Diese nicht-lokale R@"uckgabe kehrt zu dem n@"achsten @code{catch}
427 in einer beliebigen Verschachtelungstiefe zur@"uck.  Wird kein @code{catch} 
428 gefunden gibt Maxima eine Fehlermeldung aus.
430 @c If the evaluation of the arguments does not lead to the evaluation of any 
431 @c @code{throw} then the value of @code{catch} is the value of @var{expr_n}.
433 F@"uhrt die Auswertung der Argumente nicht zu einem @code{throw}, dann ist
434 die R@"uckgabe das Ergebnis des letzten Ausdrucks @code{expr_n}.
436 Beispiel:
438 @c The function @code{g} returns a list of @code{f} of each element of @code{l} 
439 @c if @code{l} consists only of non-negative numbers; otherwise, @code{g} 
440 @c "catches" the first negative element of @code{l} and "throws" it up.
442 Die Funktion @code{g} gibt eine Liste mit den Werten des Lambda-Ausdrucks 
443 zur@"uck.  Tritt ein negativer Wert auf, bricht die Funktion ab, in diesem 
444 Beispiel mit @code{throw(-3)}.
446 @example
447 (%i1) lambda ([x], if x < 0 then throw(x) else f(x))$
448 (%i2) g(l) := catch (map (''%, l))$
449 (%i3) g ([1, 2, 3, 7]);
450 (%o3)               [f(1), f(2), f(3), f(7)]
451 (%i4) g ([1, 2, -3, 7]);
452 (%o4)                          - 3
453 @end example
454 @end deffn
456 @c --- 23.12.2010 DK -----------------------------------------------------------
457 @anchor{do}
458 @deffn {Spezieller Operator} do
460 @c The @code{do} statement is used for performing iteration.  Due to its great 
461 @c generality the @code{do} statement will be described in two parts. First the 
462 @c usual form will be given which is analogous to that used in several other 
463 @c programming languages (Fortran, Algol, PL/I, etc.); then the other features 
464 @c will be mentioned.
466 Die @code{do}-Anweisung erlaubt die Definition von Iterationen.  Aufgrund der
467 gro@ss{}en Allgemeinheit der @code{do}-Anweisung folgt die Beschreibung in zwei
468 Teilen.  Zun@"achst werden die bekannteren Formen beschrieben, wie sie auch in 
469 anderen Programmiersprachen vorhanden sind.  Dann folgen die weiteren 
470 M@"oglichkeiten.
472 @c There are three variants of this form that differ only in their terminating 
473 @c conditions.  They are:
475 Es gibt drei Varianten der @code{do}-Anweisung, die sich nur durch die
476 Abbruchbedingung voneinander unterscheiden.  Diese sind:
478 @example
479 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
480       @b{thru} @var{limit} @b{do} @var{body}
482 @group
483 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
484       @b{while} @var{condition} @b{do} @var{body}
485 @end group
487 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
488       @b{unless} @var{condition} @b{do} @var{body}
489 @end example
491    @c UGH. DO WE REALLY NEED TO MENTION THIS??
492 @c (Alternatively, the @code{step} may be given after the termination condition
493 @c or limit.)
495 @c @var{initial_value}, @var{increment}, @var{limit}, and @var{body} can be any
496 @c expressions.  If the increment is 1 then "@code{step 1}" may be omitted.
498 @var{initial_value}, @var{increment}, @var{limit} und @var{body} k@"onnen 
499 beliebige Ausdr@"ucke sein.  Ist das Inkrement 1, kann @code{step} entfallen.
501 @c The execution of the @code{do} statement proceeds by first assigning the 
502 @c @var{initial_value} to the @var{variable} (henceforth called the 
503 @c control-variable). Then: (1) If the control-variable has exceeded the limit 
504 @c of a @code{thru} specification, or if the condition of the @code{unless} is 
505 @c @code{true}, or if the condition of the @code{while} is @code{false} then the
506 @c @code{do} terminates. (2) The @var{body} is evaluated.  (3) The increment is 
507 @c added to the control-variable.  The process from (1) to (3) is performed 
508 @c repeatedly until the termination condition is satisfied.  One may also give 
509 @c several termination conditions in which case the @code{do} terminates when 
510 @c any of them is satisfied.
512 Die Ausf@"uhrung der @code{do}-Anweisung beginnt mit der Zuweisung von
513 @code{initial_value} an die Kontrollvariable @var{variable}.  Dann folgen die 
514 Schritte: (1) Hat die Kontrollvariable den Wert einer @code{thru}-Anweisung
515 @"uberschritten oder hat die Bedingung einer @code{unless}-Anweisung den Wert
516 @code{true} oder hat die Bedingung einer @code{while}-Anweisung den Wert
517 @code{false}, dann endet die Ausf@"uhrung der @code{do}-Anweisung.  (2) Die
518 Ausdr@"ucke in @var{body} werden ausgewertet.  (3) Das Inkrement wird zu der
519 Kontrollvariablen hinzuaddiert.  Die Schritte (1) bis (3) werden solange 
520 ausgef@"uhrt, bis eine der Bedingungen f@"ur die Beendigung der 
521 @code{do}-Anweisung zutrifft.
523 @c In general the @code{thru} test is satisfied when the control-variable is 
524 @c greater than the @var{limit} if the @var{increment} was non-negative, or when
525 @c the control-variable is less than the @var{limit} if the @var{increment} was 
526 @c negative.  The @var{increment} and @var{limit} may be non-numeric expressions
527 @c as long as this inequality can be determined.  However, unless the 
528 @c @var{increment} is syntactically negative (e.g. is a negative number) at the 
529 @c time the @code{do} statement is input, Maxima assumes it will be positive 
530 @c when the @code{do} is executed.  If it is not positive, then the @code{do} 
531 @c may not terminate properly.
533 Im Allgemeinen ist der @code{thru}-Test erf@"ullt, wenn die Kontrollvariable 
534 gr@"o@ss{}er als @var{limit} ist, falls @var{increment} nicht negativ ist.  Oder 
535 wenn die Kontrollvariable kleiner als @code{limit} ist, f@"ur den Fall, dass das
536 Inkrement negativ ist.  @var{increment} und @var{limit} k@"onnen Ausdr@"ucke 
537 sein, sofern die Bedingung zum Abbruch der @code{do}-Anweisung ausgewertet 
538 werden kann.  Soll @code{increment} zu einem negativen Wert auswerten und kann 
539 dies jedoch bei Eintritt in die Schleife von Maxima nicht festgestellt werden, 
540 so wird das Inkrement als positiv angenommen.  Dies kann dazu f@"uhren, dass die
541 Schleife nicht korrekt ausgef@"uhrt wird.
543 @c Note that the @var{limit}, @var{increment}, and termination condition are
544 @c evaluated each time through the loop.  Thus if any of these involve much 
545 @c computation, and yield a result that does not change during all the 
546 @c executions of the @var{body}, then it is more efficient to set a variable to 
547 @c their value prior to the @code{do} and use this variable in the @code{do} 
548 @c form.
550 @var{limit}, @var{increment} und die Bedingung f@"ur den Abbruch der Schleife 
551 werden f@"ur jeden Durchgang durch die Schleife ausgewertet.  @"Andern diese 
552 ihren Wert nicht, kann es daher effizienter sein, die Werte diese Ausdr@"ucke 
553 vor Eintritt in die Schleife zu berechnen und in Variablen abzulegen, die 
554 anstatt der Ausdr@"ucke in der Schleife verwendet werden.
556 @c The value normally returned by a @code{do} statement is the atom @code{done}.
557 @c However, the function @code{return} may be used inside the @var{body} to 
558 @c exit the @code{do} prematurely and give it any desired value. Note however 
559 @c that a @code{return} within a @code{do} that occurs in a @code{block} will 
560 @c exit only the @code{do} and not the @code{block}. Note also that the 
561 @c @code{go} function may not be used to exit from a @code{do} into a 
562 @c surrounding @code{block}.
564 Die @code{do}-Anweisung hat den R@"uckgabewert @code{done}.  Um einen anderen
565 Wert zu@-r@"uck@-zu@-ge@-ben, kann die @code{return}-Anweisung innerhalb von 
566 @code{body} genutzt werden.  Befindet sich die @code{do}-Anweisung innerhalb 
567 eines Blockes, so wird dieser nicht mit einer @code{return}-Anweisung verlassen,
568 die sich innerhalb der @code{do}-Anweisung befindet.  Auch kann nicht mit der
569 @code{go}-Anweisung in einen umgebenen Block gesprungen werden.
571 @c The control-variable is always local to the @code{do} and thus any variable 
572 @c may be used without affecting the value of a variable with the same name 
573 @c outside of the @code{do}.  The control-variable is unbound after the 
574 @c @code{do} terminates.
576 Die Kontrollvariable ist immer lokal zur @code{do}-Anweisung.  Nach dem
577 Verlassen der @code{do}-Anweisung kann auf die Kontrollvariable nicht mehr 
578 zugegriffen werden.
580 @example
581 (%i1) for a:-3 thru 26 step 7 do display(a)$
582                              a = - 3
584                               a = 4
586                              a = 11
588                              a = 18
590                              a = 25
591 @end example
593 @c Note that the condition @code{while i <= 10} is equivalent to 
594 @c @code{unless i > 10} and also @code{thru 10}.
596 Die Bedingung @code{while i <= 10} ist @"aquivalent zu den Bedingungen
597 @code{unless i > 10} und @code{thru 10} ist.
599 @example
600 (%i1) s: 0$
601 (%i2) for i: 1 while i <= 10 do s: s+i;
602 (%o2)                         done
603 (%i3) s;
604 (%o3)                          55
605 @end example
607 @c which gives 8 terms of the Taylor series for @code{e^sin(x)}.
609 Berechne die ersten acht Terme einer Taylorreihe in einer @code{do}-Schleife.
611 @example
612 (%i1) series: 1$
613 (%i2) term: exp (sin (x))$
614 (%i3) for p: 1 unless p > 7 do
615           (term: diff (term, x)/p, 
616            series: series + subst (x=0, term)*x^p)$
617 (%i4) series;
618                   7    6     5    4    2
619                  x    x     x    x    x
620 (%o4)            -- - --- - -- - -- + -- + x + 1
621                  90   240   15   8    2
622 @end example
624 @c This example computes the negative square root of 10 using the Newton-Raphson
625 @c iteration a maximum of 10 times.  Had the convergence criterion not been met 
626 @c the value returned would have been @code{done}.
628 In diesem Beispiel wird die negative Wurzel von 10 mit einem 
629 Newton-Raphson-Algorithmus berechnet. 
631 @example
632 (%i1) poly: 0$
633 (%i2) for i: 1 thru 5 do
634           for j: i step -1 thru 1 do
635               poly: poly + i*x^j$
636 (%i3) poly;
637                   5      4       3       2
638 (%o3)          5 x  + 9 x  + 12 x  + 14 x  + 15 x
639 (%i4) guess: -3.0$
640 (%i5) for i: 1 thru 10 do
641           (guess: subst (guess, x, 0.5*(x + 10/x)),
642            if abs (guess^2 - 10) < 0.00005 then return (guess));
643 (%o5)                  - 3.162280701754386
644 @end example
646 @c Instead of always adding a quantity to the control-variable one may sometimes
647 @c wish to change it in some other way for each iteration. In this case one may 
648 @c use @code{next @var{expression}} instead of @code{step @var{increment}}. This
649 @c will cause the control-variable to be set to the result of evaluating 
650 @c @var{expression} each time through the loop.
652 Anstatt eines festes Inkrements mit @code{step} kann die Kontrollvariable auch 
653 mit @code{next} f@"ur jeden Schleifendurchgang berechnet werden.
655 @example
656 (%i6) for count: 2 next 3*count thru 20 do display (count)$
657                             count = 2
659                             count = 6
661                            count = 18
662 @end example
664    @c UGH. DO WE REALLY NEED TO MENTION THIS??
665 @c As an alternative to @code{for @var{variable}: @var{value} ... the 
666 @c syntax @code{for @var{variable} from @var{value} ...do...}  may be used. This
667 @c permits the @code{from @var{value}} to be placed after the @code{step} or 
668 @c @code{next} value or after the termination condition. If 
669 @c @code{from @var{value}} is omitted then 1 is used as the initial value.
671 Anstatt mit der Syntax @code{for @var{variable}: @var{value} ...} kann die
672 Kontrollvariable auch mit @code{for @var{variable} from @var{value} ...do...}
673 initialisiert werden.  Wird auch @code{from @var{value}} fortgelassen, wird
674 die Kontrollvariable mit dem Wert 1 initialisiert.
676 @c Sometimes one may be interested in performing an iteration where the 
677 @c control-variable is never actually used.  It is thus permissible to give only
678 @c the termination conditions omitting the initialization and updating 
679 @c information as in the following example to compute the square-root of 5 using
680 @c a poor initial guess.
682 Manchmal kann es von Interesse sein, in einer Schleife keine Kontrollvariable
683 zu nutzen.  In diesem Fall gen@"ugt es allein die Bedingung f@"ur den Abbruch 
684 der Schleife anzugeben.  Im folgenden wird die Wurzel aus 5 mit dem 
685 Heron-Verfahren bestimmt.
687 @example
688 (%i1) x: 1000$
689 (%i2) thru 20 do x: 0.5*(x + 5.0/x)$
690 (%i3) x;
691 (%o3)                   2.23606797749979
692 (%i4) sqrt(5), numer;
693 (%o4)                   2.23606797749979
694 @end example
696 @c If it is desired one may even omit the termination conditions entirely and 
697 @c just give @code{do @var{body}} which will continue to evaluate the @var{body} 
698 @c indefinitely.  In this case the function @code{return} should be used to 
699 @c terminate execution of the @code{do}.
701 Auch die Abbruchbedingung kann fortgelassen werden.  Wird allein
702 @code{do @var{body}} angegeben, wird die Schleife unendlich oft ausgef@"uhrt. 
703 Die Schleife kann mit der @code{return}-Anweisung verlassen werden.   Das 
704 folgende Beispiel zeigt eine Implementierung des Newton-Algorithmus.
706 @example
707 @group
708 (%i1) newton (f, x):= ([y, df, dfx], df: diff (f ('x), 'x),
709           do (y: ev(df), x: x - f(x)/y, 
710               if abs (f (x)) < 5e-6 then return (x)))$
711 @end group
712 (%i2) sqr (x) := x^2 - 5.0$
713 (%i3) newton (sqr, 1000);
714 (%o3)                   2.236068027062195
715 @end example
717    @c DUNNO IF WE NEED THIS LEVEL OF DETAIL; THIS ARTICLE IS GETTING PRETTY LONG
718 @c (Note that @code{return}, when executed, causes the current value of @code{x}
719 @c to be returned as the value of the @code{do}.  The @code{block} is exited and
720 @c this value of the @code{do} is returned as the value of the @code{block} 
721 @c because the @code{do} is the last statement in the block.)
723 @c One other form of the @code{do} is available in Maxima.  The syntax is:
725 Eine weitere Syntax ist die folgende:
727 @example
728 for @var{variable} in @var{list} @var{end_tests} do @var{body}
729 @end example
731 @c The elements of @var{list} are any expressions which will successively be 
732 @c assigned to the @code{variable} on each iteration of the @var{body}.  The 
733 @c optional termination tests @var{end_tests} can be used to terminate execution
734 @c of the @code{do}; otherwise it will terminate when the @var{list} is 
735 @c exhausted or when a @code{return} is executed in the @var{body}.  In fact, 
736 @c @code{list} may be any non-atomic expression, and successive parts are taken.
738 Die Elemente der Liste @var{list} k@"onnen beliebige Ausdr@"ucke sein, die
739 nacheinander der Kontrollvariablen zugewiesen werden.  Die Schleife bricht ab, 
740 wenn die optionale Abbruchbedingung @code{end_test} zutrifft, wenn die Liste
741 @var{list} keine weiteren Elemente enth@"alt oder wenn die Schleife zum Beispiel
742 mit der Funktion @code{return} verlassen wird.
744 @example
745 (%i1)  for f in [log, rho, atan] do ldisp(f(1))$
746 (%t1)                                  0
747 (%t2)                                rho(1)
748                                      %pi
749 (%t3)                                 ---
750                                       4
751 (%i4) ev(%t3,numer);
752 (%o4)                             0.78539816
753 @end example
754 @end deffn
756 @c --- 02.10.2011 DK -----------------------------------------------------------
757 @anchor{eval_when}
758 @deffn  {Funktion} eval_when (@var{keyword}, @var{expr_1}, @dots{}, @var{expr_n})
759 @deffnx {Funktion} eval_when ([@var{keyword_1}, @var{keyword_2}, @dots{}], @var{expr_1}, @dots{}, @var{expr_n})
761 Ein Ausdruck mit der Funktion @code{eval_when} wird an oberster Stelle in einer
762 Datei definiert und erlaubt die bedingte Auswertung von Ausdr@"ucken beim Laden,
763 @"Ubersetzen oder Kompilieren einer Datei.  Das Argument @var{keyword} ist eines
764 der Schl@"usselworte @code{batch}, @code{translate}, @code{compile} oder
765 @code{loadfile}.  Das erste Argument kann ein einzelnes Schl@"usselwort oder
766 ein Liste mit mehreren Schl@"usselworten sein.  Trifft die mit dem
767 Schl@"usselwort angegebene Bedingung zu, wird eine oder mehrere der folgenden
768 Aktionen ausgef@"uhrt:
770 @table @code
771 @item batch
772 Wird die Datei mit einer der Funktionen @mrefcomma{load} @mrefcomma{batch}@w{}
773 @mref{batchload} oder @mref{demo} geladen und ist @code{batch} in der Liste der
774 Schl@"usselworte enthalten, dann werden die Ausdr@"ucke @var{expr1}, @dots{},
775 @var{expr_n} genau einmal beim Laden der Datei ausgewertet.  Die R@"uckgabe der
776 Funktion @code{eval_when} ist ein Ausdruck @code{evaluated_when(@var{result)}},
777 wobei @var{result} das Ergebnis der Auswertung ist.  Ist das Schl@"usselwort
778 @code{batch} nicht vorhanden, ist die R@"uckgabe das Symbol
779 @code{not_evaluated_when}.
781 @item translate
782 Wird die Datei mit dem Kommando @mref{translate_file} oder
783 @mref{compile_file} geladen und ist @code{translate} unter den
784 Schl@"usselworten, dann werden die Ausdr@"ucke @var{expr_1}, @dots{},
785 @var{expr_n} sofort ausgewertet.  Seiteneffekte wie Zuweisungen von Werten
786 an Optionsvariablen oder Deklarationen sind f@"ur die folgende @"Ubersetzung
787 der Datei nach Lisp wirksam.  Die Ausdr@"ucke sind jedoch nicht Teil des
788 @"ubersetzten Programms.
790 @item loadfile
791 Wird die Datei mit dem Kommando @mref{translate_file} oder dem Kommando
792 @mref{compile_file} geladen und ist @code{loadfile} unter den
793 Schl@"us@-sel@-wor@-ten, dann werden die Ausdr@"ucke @var{expr_1}, @dots{},
794 @var{expr_n} nach Lisp @"ubersetzt und als Block der Form
795 @code{(PROGN EXPR_1 ... EXPR_N)} in das Lisp Programm eingesetzt.  Hier sind
796 die Anweisungen @var{EXPR_I} die nach Lisp @"ubersetzten Maxima-Ausdr@"ucke
797 @var{expr_i}.
799 @item compile
800 Wird die Datei mit dem Kommando @mref{translate_file} oder
801 @mref{compile_file} geladen und ist @code{compile} unter den
802 Schl@"us@-sel@-wor@-ten, dann werden die Ausdr@"ucke @var{expr_1}, @dots{},
803 @var{expr_n} nach Lisp @"ubersetzt und als eine Lisp-Anweisung in das
804 Lisp-Programm eingesetzt, die die Form @code{(EVAL-WHEN (:COMPILE-TOPLEVEL)
805 (EXPR_1 ... EXPR_N))} hat.  Das Schl@"usselwort @code{compile} kann nicht mit
806 dem Schl@"usselwort @code{loadfile} in einem @code{eval_when}-Ausdruck
807 kombiniert werden.  In diesem Fall wird das Schl@"usselwort @code{compile}
808 ignoriert.
809 @end table
811 Beispiele:
813 F@"ur die folgende Beispiele ist eine Datei mit den Namen
814 @code{eval_when.mac} definiert, die verschiedene @code{eval_when}-Anweisungen
815 enth@"alt.
817 @example
818 (%i1) file: file_search("eval_when.mac");
819 (%o1)        /home/dieter/.maxima/eval_when.mac
820 (%i2) printfile(file);
822 eval_when(batch,     print("called in mode BATCH"));
823 eval_when(loadfile,  print("called in mode LOADFILE"));
824 eval_when(compile,   print("called in mode COMPILE"));
825 eval_when(translate, print("called in mode TRANSLATE"));
827 (%o2)        /home/dieter/.maxima/eval_when.mac
828 @end example
830 Die Datei wird mit dem Kommando @code{load} geladen.  Die Anweisung mit
831 dem Schl@"usselwort @code{batch} wird beim Laden einmal ausgef@"uhrt.
833 @example
834 (%i1) file: file_search("eval_when.mac");
835 (%o1)        /home/dieter/.maxima/eval_when.mac
836 (%i2) load("file");
837 called in mode BATCH
838 (%o2)        /home/dieter/.maxima/eval_when.mac
839 @end example
841 In diesem Fall wird die Datei mit dem Befehl @code{batch} geladen.  Die
842 Anweisung mit dem Schl@"usselwort @code{batch} wird einmal ausgef@"uhrt.
843 Die anderen @code{eval_when}-Anweisungen werten jeweils zum Ergebnis
844 @code{not_evaluated_when} aus.
846 @example
847 (%i3) batch(file);
849 read and interpret file: /home/dieter/.maxima/eval_when.mac
850 (%i4)     eval_when(batch, print(called in mode BATCH))
851 called in mode BATCH 
852 (%o4)         evaluated_when(called in mode BATCH)
853 (%i5)  eval_when(loadfile, print(called in mode LOADFILE))
854 (%o5)                  not_evaluated_when
855 (%i6)   eval_when(compile, print(called in mode COMPILE))
856 (%o6)                  not_evaluated_when
857 (%i7) eval_when(translate, print(called in mode TRANSLATE))
858 (%o7)                  not_evaluated_when
859 (%o7)        /home/dieter/.maxima/eval_when.mac
860 @end example
862 Jetzt wird die Datei mit dem Kommando @code{translate_file} geladen und nach
863 Lisp @"ubersetzt.  Der Ausdruck mit dem Schl@"usselwort @code{translate} wird
864 sofort ausgewertet.  Das @"ubersetzte Programm wird in die Ausgabedatei
865 @code{eval_when.LISP} geschrieben.  Die @code{eval_when}-Anweisung zum
866 Schl@"usselwort wird nicht ausgewertet.
868 @example
869 (%i1) file: file_search("eval_when.mac");
870 (%o1)        /home/dieter/.maxima/eval_when.mac
871 (%i2) translate_file(file);
872 translator: begin translating /home/dieter/.maxima/eval_when.mac.
873 called in mode TRANSLATE 
874 (%o2) [/home/dieter/.maxima/eval_when.mac, 
875 /home/dieter/.maxima/eval_when.LISP, 
876 /home/dieter/.maxima/eval_when.UNLISP]
877 @end example
879 Dies ist der Inhalt der Ausgabedatei @code{eval_when.LISP}.  Die Ausgabedatei
880 enth@"alt eine @code{PROGN}-Anweisung mit dem Ausdruck
881 @code{($print '"called in mode LOADFILE")} f@"ur den @code{eval_when}-Ausdruck
882 zum Schl@"usselwort @code{loadfile} sowie eine @code{EVAL-WHEN}-Anweisung mit
883 dem Ausdruck @code{($print '"called in mode COMPILE")} f@"ur den
884 @code{eval_when}-Ausdruck mit dem Schl@"usselwort @code{compile}.
886 @verbatim
887 ;;; -*- Mode: Lisp; package:maxima; syntax:common-lisp ;Base: 10 -*- ;;;
888 ;;; Translated on: 2011-10-02 13:35:37+02:00
889 ;;; Maxima version: 5.25post
890 ;;; Lisp implementation: SBCL
891 ;;; Lisp version: 1.0.45
892 (in-package :maxima)
894 [...]
897 (progn ($print '"called in mode LOADFILE"))
898 (eval-when (:compile-toplevel) ($print '"called in mode COMPILE"))
900 @end verbatim
901 @end deffn
903 @c --- 25.12.2010 DK -----------------------------------------------------------
904 @anchor{errcatch}
905 @deffn {Funktion} errcatch (@var{expr_1}, @dots{}, @var{expr_n})
907 @c Evaluates @var{expr_1}, ..., @var{expr_n} one by one and returns 
908 @c @code{[@var{expr_n}]} (a list) if no error occurs.  If an error occurs in the
909 @c evaluation of any argument, @code{errcatch} prevents the error from 
910 @c propagating and returns the empty list @code{[]} without evaluating any more 
911 @c arguments.
913 Wertet die Ausdr@"ucke @var{expr_1}, @dots{}, @var{expr_n} nacheinander aus und
914 gibt das Ergebnis des letzten Ausdrucks als eine Liste @code{[@var{expr_n}]}
915 zur@"uck, wenn kein Fehler bei der Auswertung auftritt.  Tritt ein Fehler
916 bei der Auswertung eines der Ausdr@"ucke auf, ist die R@"uckgabe eine leere 
917 Liste @code{[]}.
919 @c @code{errcatch} is useful in @code{batch} files where one suspects an error 
920 @c might occur which would terminate the @code{batch} if the error weren't 
921 @c caught.
923 @code{errcatch} ist n@"utzlich in Batch-Dateien.  Mit @code{errcatch} kann ein
924 m@"oglicher Fehler abgefangen werden, ohne das die Verarbeitung der Batch-Datei
925 abbricht.
927 Beispiele:
929 @example
930 (%i1) errcatch(x:2,1/x);
931                                 1
932 (%o1)                          [-]
933                                 2
934 (%i2) errcatch(x:0,1/x);
936 Division by 0
937 (%o2)                          []
938 @end example
939 @end deffn
941 @c --- 25.12.2010 DK -----------------------------------------------------------
942 @anchor{error}
943 @deffn  {Funktion} error (@var{expr_1}, @dots{}, @var{expr_n})
944 @deffnx {Systemvariable} error
946 @c Evaluates and prints @var{expr_1}, ..., @var{expr_n}, and then causes an 
947 @c error return to top level Maxima or to the nearest enclosing @code{errcatch}.
949 Wertet die Ausdr@"ucke @var{expr_1}, @dots{}, @var{expr_n} aus, gibt diese auf 
950 der Konsole aus und generiert einen Fehler, der zur obersten Ebene von Maxima 
951 f@"uhrt oder zu dem n@"achsten @code{errcatch}.
953 @c The variable @code{error} is set to a list describing the error. The first 
954 @c element of @code{error} is a format string, which merges all the strings 
955 @c among the arguments @var{expr_1}, ..., @var{expr_n}, and the remaining 
956 @c elements are the values of any non-string arguments.
958 Der Systemvariablen @code{error} wird eine Liste zugewiesen, die eine 
959 Beschreibung des Fehlers enth@"alt.  Das erste Element der Liste ist eine
960 Zeichenkette und die weiteren Elemente enthalten die Argumente die keine 
961 Zeichenkette sind.
963 @c @code{errormsg()} formats and prints @code{error}. This is effectively 
964 @c reprinting the most recent error message.
966 @code{errormsg()} formatiert und gibt die Fehlermeldung in @code{error} aus.
967 Damit wird die letzte Fehlermeldung erneut ausgegeben.
969 Beispiel:
971 @example
972 (%i1) f(x):= if x=0 then 
973                 error("Division durch", x, "ist nicht gestattet.") 
974              else 1/x$
975 (%i2) f(0);
977 Division durch 0 ist nicht gestattet.
978 #0: f(x=0)
979  -- an error. To debug this try: debugmode(true);
980 (%i3) errormsg();
982 Division durch 0 ist nicht gestattet.
983 (%o3)                         done
984 (%i4) error;
985 (%o4)      [Division durch ~M ist nicht gestattet., 0]
986 @end example
987 @end deffn
989 @c --- 25.12.2010 DK -----------------------------------------------------------
990 @anchor{error_size}
991 @defvr {Optionsvariable} error_size
992 Standardwert: 10
994 @c @code{error_size} modifies error messages according to the size of 
995 @c expressions which appear in them. If the size of an expression (as determined
996 @c by the Lisp function @code{ERROR-SIZE}) is greater than @code{error_size}, 
997 @c the expression is replaced in the message by a symbol, and the symbol is 
998 @c assigned the expression. The symbols are taken from the list 
999 @c @code{error_syms}.
1001 @code{error_size} kontrolliert die Ausgabe eines Ausdrucks der zu einem Fehler
1002 gef@"uhrt hat.  Ist der Ausdruck gr@"o@ss{}er als @code{error_size} wird der 
1003 Ausdruck bei der Ausgabe einer Fehlermeldung durch ein Symbol ersetzt und dem 
1004 Symbol wird der Ausdruck zugewiesen.  Die Symbole werden aus der Liste 
1005 @code{error_syms} ausgew@"ahlt.
1007 @c Otherwise, the expression is smaller than @code{error_size}, and the 
1008 @c expression is displayed in the message.
1010 Ist der Ausdruck kleiner als @code{error_size} wird dieser mit der Fehlermeldung
1011 ausgegeben.
1013 @c See also @code{error} and @code{error_syms}.
1015 Siehe auch @mref{error} und @mrefdot{error_syms}
1017 Beispiel:
1019 @c The size of @code{U}, as determined by @code{ERROR-SIZE}, is 24.
1021 Die Gr@"o@ss{}e des Ausdrucks @code{U} ist 24.
1023 @example
1024 (%i1) U: (C^D^E + B + A)/(cos(X-1) + 1)$
1026 (%i2) error_size: 20$
1028 (%i3) error ("Example expression is", U);
1030 Example expression is errexp1
1031  -- an error.  Quitting.  To debug this try debugmode(true);
1032 (%i4) errexp1;
1033                             E
1034                            D
1035                           C   + B + A
1036 (%o4)                    --------------
1037                          cos(X - 1) + 1
1038 (%i5) error_size: 30$
1040 (%i6) error ("Example expression is", U);
1042                          E
1043                         D
1044                        C   + B + A
1045 Example expression is --------------
1046                       cos(X - 1) + 1
1047  -- an error.  Quitting.  To debug this try debugmode(true);
1048 @end example
1049 @end defvr
1051 @c --- 25.12.2010 DK -----------------------------------------------------------
1052 @anchor{error_syms}
1053 @defvr {Optionsvariable} error_syms
1054 Standardwert: @code{[errexp1, errexp2, errexp3]}
1056 @c In error messages, expressions larger than @code{error_size} are replaced by 
1057 @c symbols, and the symbols are set to the expressions.  The symbols are taken 
1058 @c from the list @code{error_syms}. The first too-large expression is replaced 
1059 @c by @code{error_syms[1]}, the second by @code{error_syms[2]}, and so on.
1061 In Fehlermeldungen werden Ausdr@"ucke, die gr@"o@ss{}er als @code{error_size} 
1062 sind, durch Symbole ersetzt, denen der Ausdruck zugewiesen wird.  Die Symbole 
1063 werden nacheinander der Liste @code{error_syms} entnommen.
1065 @c If there are more too-large expressions than there are elements of 
1066 @c @code{error_syms}, symbols are constructed automatically, with the @var{n}-th 
1067 @c symbol equivalent to @code{concat ('errexp, @var{n})}.
1069 Sind keine Symbole mehr vorhanden, werden automatisch neue Symbole mit
1070 @code{concat('errexp, @var{n})} gebildet.
1072 @c See also @code{error} and @code{error_size}.
1074 Siehe auch @mref{error} und @mrefdot{error_size}
1075 @end defvr
1077 @c --- 25.12.2010 DK -----------------------------------------------------------
1078 @anchor{errormsg}
1079 @deffn {Funktion} errormsg ()
1081 @c Reprints the most recent error message. The variable @code{error} holds the 
1082 @c message, and @code{errormsg} formats and prints it.
1084 Gibt die letzte Fehlermeldung erneut aus.  Die Fehlermeldung ist in der
1085 Systemvariablen @code{errormsg} enthalten.  Die Funktion @code{errormsg}
1086 formatiert diese und gibt sie aus.
1087 @end deffn
1089 @c --- 27.12.2010 DK -----------------------------------------------------------
1090 @anchor{variable_errormsg}
1091 @defvr {Optionsvariable} errormsg
1092 Standardwert: @code{true}
1094 @c When @code{false} the output of error messages is suppressed.
1096 Hat die Optionsvariable @code{errormsg} den @code{false} wird die Ausgabe
1097 von Fehlermeldungen unterdr@"uckt.
1099 @c The option variable @code{errormsg} can not be set in a block to a local 
1100 @c value. The global value of @code{errormsg} is always present.
1102 Der Optionsvariablen @code{errormsg} kann in einem Block kein lokaler Wert
1103 zugewiesen werden.  Der globale Wert von @code{errormsg} ist stets pr@"asent.
1105 Beispiele:
1107 @example
1108 (%i1) errormsg;
1109 (%o1)                                true
1110 (%i2) sin(a,b);
1111 Wrong number of arguments to sin
1112  -- an error. To debug this try: debugmode(true);
1113 (%i3) errormsg:false;
1114 (%o3)                                false
1115 (%i4) sin(a,b);
1117  -- an error. To debug this try: debugmode(true);
1118 @end example
1120 @c The option variable @code{errormsg} can not be set in a block to a local 
1121 @c value.
1123 Der Optionsvariablen @code{errormsg} kann in einem Block kein lokaler Wert
1124 zugewiesen werden.
1126 @example
1127 (%i1) f(bool):=block([errormsg:bool], 
1128                      print ("value of errormsg is",errormsg))$
1129 (%i2) errormsg:true;
1130 (%o2)                                true
1131 @group
1132 (%i3) f(false);
1133 value of errormsg is true 
1134 @end group
1135 (%o3)                                true
1136 (%i4) errormsg:false;
1137 (%o4)                                false
1138 (%i5) f(true);
1139 value of errormsg is false 
1140 (%o5)                                false
1141 @end example
1142 @end defvr
1144 @c REPHRASE
1145 @c AT LEAST SHOULD LIST VARIANTS HERE
1147 @c --- 25.12.2010 DK -----------------------------------------------------------
1148 @anchor{for}
1149 @deffn {Spezieller Operator} for
1151 @c Used in iterations. See @code{do} for a description of Maxima's iteration 
1152 @c facilities.
1154 Anweisung f@"ur Interationen.  Siehe die @mref{do}-Anweisung f@"ur eine 
1155 Beschreibung der Iterationsm@"oglichkeiten von Maxima.
1156 @end deffn
1158 @c --- 25.12.2010 DK -----------------------------------------------------------
1159 @anchor{go}
1160 @deffn {Funktion} go (@var{tag})
1162 @c is used within a @code{block} to transfer control to the statement of the 
1163 @c block which is tagged with the argument to @code{go}.  To tag a statement, 
1164 @c precede it by an atomic argument as another statement in the @code{block}.  
1165 @c For example:
1167 Erlaubt einen Sprung innerhalb eines Blocks zu einer Marke mit dem Namen 
1168 @code{tag}.  Um eine Anweisung mit einer Sprungmarke zu versehen, wird der
1169 Anweisung die Marke vorangestellt.  Ein Beispiel ist:
1171 @example
1172 block ([x], x:1, loop, x+1, ..., go(loop), ...)
1173 @end example
1175 @c The argument to @code{go} must be the name of a tag appearing in the same
1176 @c @code{block}.  One cannot use @code{go} to transfer to tag in a @code{block} 
1177 @c other than the one containing the @code{go}.
1179 Das Argument der Funktion @code{go} muss der Name einer Marke sein, die in
1180 demselben Block erscheint.  Es ist nicht m@"oglich in einen anderen Block zu
1181 springen.
1182 @end deffn
1184 @c NEEDS CLARIFICATION, EXPANSION, EXAMPLES
1185 @c THIS ITEM IS IMPORTANT
1187 @c --- 25.12.2010 DK -----------------------------------------------------------
1188 @anchor{if}
1189 @deffn {Spezieller Operator} if
1191 @c Represents conditional evaluation. Various forms of @code{if} expressions are 
1192 @c recognized.
1194 Ist die bedingte Anweisung.  Verschiedene Formen einer bedingten Anweisung sind
1195 m@"oglich.
1197 @c @code{if @var{cond_1} then @var{expr_1} else @var{expr_0}} evaluates to 
1198 @c @var{expr_1} if @var{cond_1} evaluates to @code{true}, otherwise the 
1199 @c expression evaluates to @var{expr_0}.
1201 @code{if @var{cond_1} then @var{expr_1} else @var{expr_0}} wertet zu 
1202 @var{expr_1} aus, wenn die Bedingung @var{cond_1} den Wert @code{true} hat.
1203 Ansonsten wertet der Ausdruck zu @var{expr_0} aus.
1205 @c @code{if @var{cond_1} then @var{expr_1} elseif @var{cond_2} then @var{expr_2}
1206 @c elseif ... else @var{expr_0}} evaluates to @var{expr_k} if @var{cond_k} is 
1207 @c @code{true} and all preceding conditions are @code{false}. If none of the 
1208 @c conditions are @code{true}, the expression evaluates to @code{expr_0}.
1210 Die zusammengesetzte bedingte Anweisung @code{if @var{cond_1} then @var{expr_1}
1211 elseif @var{cond_2} then @var{expr_2} elseif ... else @var{expr_0}} wertet 
1212 zu @var{expr_k} aus, wenn die Bedingung @var{cond_k} den Wert @code{true} hat 
1213 und alle vorhergehenden Bedingungen den Wert @code{false} haben.  Trifft keine 
1214 der Bedingungen zu, wertet der Ausdruck zu @var{expr_0} aus.
1216 @c A trailing @code{else false} is assumed if @code{else} is missing. That is, 
1217 @c @code{if @var{cond_1} then @var{expr_1}} is equivalent to 
1218 @c @code{if @var{cond_1} then @var{expr_1} else false}, and 
1219 @c @code{if @var{cond_1} then @var{expr_1} elseif ... elseif @var{cond_n} then 
1220 @c @var{expr_n}} is equivalent to @code{if @var{cond_1} then @var{expr_1} elseif
1221 @c ... elseif @var{cond_n} then @var{expr_n} else false}.
1223 Fehlt die Anweisung @code{else}, wird diese zu @code{else false} angenommen.
1224 @code{if @var{cond_1} then @var{expr_1}} ist daher @"aquivalent zu 
1225 @code{if @var{cond_1} then @var{expr_1} else false} und @code{if @var{cond_1} 
1226 then @var{expr_1} elseif ... elseif @var{cond_n} then @var{expr_n}} ist 
1227 @"aquivalent zu @code{if @var{cond_1} then @var{expr_1} elseif ... elseif 
1228 @var{cond_n} then @var{expr_n} else false}.
1230 @c The alternatives @var{expr_0}, ..., @var{expr_n} may be any Maxima 
1231 @c expressions, including nested @code{if} expressions. The alternatives are 
1232 @c neither simplified nor evaluated unless the corresponding condition is 
1233 @c @code{true}.
1235 Die Anweisungen @var{expr_0}, @dots{}, @var{expr_n} k@"onnen beliebige 
1236 Maxima-Ausdr@"ucke ein@-schlie@ss{}@-lich weiterer @code{if}-Anweisungen sein.  
1237 Die Anweisungen werden nicht vereinfacht oder ausgewertet, solange die 
1238 dazugeh@"orende Bedingung nicht das Ergebnis @code{true} hat.
1240 @c The conditions @var{cond_1}, ..., @var{cond_n} are expressions which 
1241 @c potentially or actually evaluate to @code{true} or @code{false}. When a 
1242 @c condition does not actually evaluate to @code{true} or @code{false}, the 
1243 @c behavior of @code{if} is governed by the global flag @code{prederror}. When 
1244 @c @code{prederror} is @code{true}, it is an error if any evaluated condition 
1245 @c does not evaluate to @code{true} or @code{false}. Otherwise, conditions which
1246 @c do not evaluate to @code{true} or @code{false} are accepted, and the result 
1247 @c is a conditional expression.
1249 Die Bedingungen @var{cond_1}, @dots{}, @var{cond_n} sind Ausdr@"ucke, die zu 
1250 @code{true} oder @code{false} ausgewertet werden k@"onnen.  Kann eine Bedingung
1251 nicht zu @code{true} oder @code{false} ausgewertet werden, h@"angt die Reaktion
1252 von der Optionsvariablen @code{prederror} ab.  Hat @code{prederror} den Wert
1253 @code{true}, dann meldet Maxima einen Fehler, wenn eine Bedingung nicht zu
1254 @code{true} oder @code{false} ausgewertet werden kann.  Ansonsten werden
1255 Bedingungen akzeptiert, die nicht zu @code{true} oder @code{false} ausgewertet
1256 werden k@"onnen und das Ergebnis ist ein bedingter Ausdruck.
1258 @c Among other elements, conditions may comprise relational and logical 
1259 @c operators as follows.
1261 Die Bedingungen k@"onnen die folgenden Operatoren enthalten:
1263    @c - SEEMS LIKE THIS TABLE WANTS TO BE IN A DISCUSSION OF PREDICATE FUNCTIONS
1264    @c   PRESENT LOCATION IS OK I GUESS
1265    @c - REFORMAT THIS TABLE USING TEXINFO MARKUP (MAYBE)
1267 @example
1268 Operation              Symbol      Typ
1270 less than              <           relational infix
1271 less than              <=
1272   or equal to                      relational infix
1273 equality (syntactic)   =           relational infix
1274 negation of =          #           relational infix
1275 equality (value)       equal       relational function
1276 negation of equal      notequal    relational function
1277 greater than           >=
1278   or equal to                      relational infix
1279 greater than           >           relational infix
1280 and                    and         logical infix
1281 or                     or          logical infix
1282 not                    not         logical prefix
1283 @end example
1284 @end deffn
1286 @c --- 27.12.2010 DK -----------------------------------------------------------
1287 @anchor{local}
1288 @deffn {Funktion} local (@var{v_1}, @dots{}, @var{v_n})
1290 @c Saves the properties associated with the symbols @var{v_1}, ..., @var{v_n},
1291 @c removes any properties before evaluating other expressions, and restores any 
1292 @c saved properties on exit from the block or other compound expression in which
1293 @c @code{local} appears.
1295 Speichert alle Eigenschaften der Symbole @var{v_1}, @dots{}, @var{v_n}, entfernt
1296 die Eigenschaften und stellt die abgespeicherten Eigenschaften nach dem Austritt
1297 aus einem Block oder einem zusammengesetzten Ausdruck in dem @code{local}
1298 auftritt wieder her.
1300 @c Some declarations are implemented as properties of a symbol, including 
1301 @c @code{:=}, @code{array}, @code{dependencies}, @code{atvalue}, 
1302 @c @code{matchdeclare}, @code{atomgrad}, @code{constant}, @code{nonscalar}, 
1303 @c @code{assume}, and some others. The effect of @code{local} is to make such 
1304 @c declarations effective only within the block or other compound expression in 
1305 @c which @code{local} appears; otherwise such declarations are global 
1306 @c declarations.
1308 Einige Deklarationen sind als Eigenschaft eines Symbols implementiert.  Dazu
1309 geh@"oren Deklarationen mit @code{:=}, @code{array}, @code{dependencies}, 
1310 @code{atvalue}, @code{matchdeclare}, @code{atomgrad}, @code{constant}, 
1311 @code{nonscalar} oder @code{assume}.  Der Effekt von @code{local} ist, dass
1312 solche Deklarationen nur lokal in dem Block wirksam sind.
1314 @c @code{local} can only appear in @code{block} or in the body of a function 
1315 @c definition or @code{lambda} expression, and only one occurrence is permitted 
1316 @c in each.
1318 @code{local} kann nur in @code{block}-Anweisungen oder in einer 
1319 Funktionsdefinition oder in einem Lambda-Ausdruck verwendet werden. Weiterhin
1320 darf @code{local} jeweils nur einmal auftreten.
1322 @c @code{local} quotes its arguments. @code{local} returns @code{done}.
1324 @code{local} wertet die Argumente aus.  @code{local} hat die R@"uckgabe 
1325 @code{done}.
1327 Beispiel:
1329 Eine lokale Funktionsdefinition.
1331 @example
1332 (%i1) foo (x) := 1 - x;
1333 (%o1)                    foo(x) := 1 - x
1334 (%i2) foo (100);
1335 (%o2)                         - 99
1336 (%i3) block (local (foo), foo (x) := 2 * x, foo (100));
1337 (%o3)                          200
1338 (%i4) foo (100);
1339 (%o4)                         - 99
1340 @end example
1341 @end deffn
1343 @c --- 27.12.2010 DK -----------------------------------------------------------
1344 @anchor{return}
1345 @deffn {Funktion} return (@var{value})
1347 @c May be used to exit explicitly from a block, bringing its argument.
1348 @c See @code{block} for more information.
1350 Die @code{return}-Anweisung wird in einem Block verwendet, um den Block mit dem
1351 Ergebnis @var{value} zu verlassen.  Siehe @mref{block} f@"ur mehr Informationen.
1352 @end deffn
1354 @c --- 27.12.2010 DK -----------------------------------------------------------
1355 @anchor{throw}
1356 @deffn {Funktion} throw (@var{expr})
1358 @c Evaluates @var{expr} and throws the value back to the most recent 
1359 @c @code{catch}.  @code{throw} is used with @code{catch} as a nonlocal return
1360 @c mechanism.
1362 Wertet den Ausdruck @var{expr} aus und generiert eine Ausnahme mit dem Ergebnis
1363 der Auswertung, die von der letzten @code{catch}-Anweisung behandelt wird.
1364 @end deffn
1366 @c --- 23.12.2010 Dk -----------------------------------------------------------
1367 @anchor{while}
1368 @anchor{unless}
1369 @deffn  {Spezieller Operator} while
1370 @deffnx {Spezieller Operator} unless
1372 @c See @code{do}.
1374 Siehe den Operator @mrefdot{do}
1375 @end deffn
1377 @c --- End of file Program.de.texi ---------------------------------------------