1 @c -----------------------------------------------------------------------------
2 @c File : Program.de.texi
3 @c License : GNU General Public License (GPL)
5 @c Original : Program.texi revision 25.07.2011
6 @c Translation : Dr. Dieter Kaiser
8 @c Revision : 10.12.2011
10 @c This file is part of Maxima -- GPL CAS based on DOE-MACSYMA
11 @c -----------------------------------------------------------------------------
15 * Einf@"uhrung in die Programmierung::
16 * Funktionen und Variablen der Programmierung::
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
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
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}.
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}.
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}.
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
79 Addiere die Werte der Maxima-Variablen @code{x} und @code{y} mit dem
80 Lisp-Operator @code{+}.
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
93 (%i3) :lisp (setq $res (add '$a '$b))
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.
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);
125 ((%INTEGRATE SIMP) ((MTIMES SIMP) $T ((%SIN SIMP) $T)) $T)
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.
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.
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;
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.
164 (%i1) :lisp (setq $var #$'integrate(f(x), x)$)
165 ((%INTEGRATE SIMP) (($F SIMP) $X) $X)
166 (%i1) :lisp (displa $var)
175 Maxima-Funktionen sind keine Lisp-Funktionen. Um eine Maxima-Funktion in
176 Lisp-Code aufzurufen, kann die Lisp-Funktion @code{MFUNCALL} aufgerufen werden.
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))
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:
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},
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:
254 backtrace block break
256 errcatch error error_size
257 error_syms errormsg for
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 -----------------------------------------------------------
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
285 @code{backtrace()} gibt den gesamten Stack aus.
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)$
302 @code{backtrace(@var{n})} gibt die letzten @var{n} Funktionen aus.
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)$
322 @c --- 23.02.2011 DK -----------------------------------------------------------
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
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
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}.
375 newton(exp,var,x0,eps):=
381 if abs(subst(xn,var,exp))<eps then return(xn),
382 xn:xn-subst(xn,var,exp)/subst(xn,var,s),
387 @c --- 27.12.2010 DK -----------------------------------------------------------
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
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.
404 Entering a Maxima break point. Type 'exit;' to resume.
412 @c --- 27.12.2010 DK -----------------------------------------------------------
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}.
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)}.
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]);
456 @c --- 23.12.2010 DK -----------------------------------------------------------
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
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:
479 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
480 @b{thru} @var{limit} @b{do} @var{body}
483 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
484 @b{while} @var{condition} @b{do} @var{body}
487 @b{for} @var{variable}: @var{initial_value} @b{step} @var{increment}
488 @b{unless} @var{condition} @b{do} @var{body}
491 @c UGH. DO WE REALLY NEED TO MENTION THIS??
492 @c (Alternatively, the @code{step} may be given after the termination condition
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}
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
581 (%i1) for a:-3 thru 26 step 7 do display(a)$
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.
601 (%i2) for i: 1 while i <= 10 do s: s+i;
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.
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)$
620 (%o4) -- - --- - -- - -- + -- + x + 1
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.
633 (%i2) for i: 1 thru 5 do
634 for j: i step -1 thru 1 do
638 (%o3) 5 x + 9 x + 12 x + 14 x + 15 x
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
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.
656 (%i6) for count: 2 next 3*count thru 20 do display (count)$
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.
689 (%i2) thru 20 do x: 0.5*(x + 5.0/x)$
691 (%o3) 2.23606797749979
692 (%i4) sqrt(5), numer;
693 (%o4) 2.23606797749979
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.
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)))$
712 (%i2) sqr (x) := x^2 - 5.0$
713 (%i3) newton (sqr, 1000);
714 (%o3) 2.236068027062195
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:
728 for @var{variable} in @var{list} @var{end_tests} do @var{body}
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.
745 (%i1) for f in [log, rho, atan] do ldisp(f(1))$
756 @c --- 02.10.2011 DK -----------------------------------------------------------
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:
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}.
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.
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
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}
813 F@"ur die folgende Beispiele ist eine Datei mit den Namen
814 @code{eval_when.mac} definiert, die verschiedene @code{eval_when}-Anweisungen
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
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.
834 (%i1) file: file_search("eval_when.mac");
835 (%o1) /home/dieter/.maxima/eval_when.mac
838 (%o2) /home/dieter/.maxima/eval_when.mac
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.
849 read and interpret file: /home/dieter/.maxima/eval_when.mac
850 (%i4) eval_when(batch, print(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
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.
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]
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}.
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
897 (progn ($print '"called in mode LOADFILE"))
898 (eval-when (:compile-toplevel) ($print '"called in mode COMPILE"))
903 @c --- 25.12.2010 DK -----------------------------------------------------------
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
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
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
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
930 (%i1) errcatch(x:2,1/x);
934 (%i2) errcatch(x:0,1/x);
941 @c --- 25.12.2010 DK -----------------------------------------------------------
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
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.
972 (%i1) f(x):= if x=0 then
973 error("Division durch", x, "ist nicht gestattet.")
977 Division durch 0 ist nicht gestattet.
979 -- an error. To debug this try: debugmode(true);
982 Division durch 0 ist nicht gestattet.
985 (%o4) [Division durch ~M ist nicht gestattet., 0]
989 @c --- 25.12.2010 DK -----------------------------------------------------------
991 @defvr {Optionsvariable} error_size
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
1013 @c See also @code{error} and @code{error_syms}.
1015 Siehe auch @mref{error} und @mrefdot{error_syms}
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.
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);
1036 (%o4) --------------
1038 (%i5) error_size: 30$
1040 (%i6) error ("Example expression is", U);
1045 Example expression is --------------
1047 -- an error. Quitting. To debug this try debugmode(true);
1051 @c --- 25.12.2010 DK -----------------------------------------------------------
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}
1077 @c --- 25.12.2010 DK -----------------------------------------------------------
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.
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.
1111 Wrong number of arguments to sin
1112 -- an error. To debug this try: debugmode(true);
1113 (%i3) errormsg:false;
1117 -- an error. To debug this try: debugmode(true);
1120 @c The option variable @code{errormsg} can not be set in a block to a local
1123 Der Optionsvariablen @code{errormsg} kann in einem Block kein lokaler Wert
1127 (%i1) f(bool):=block([errormsg:bool],
1128 print ("value of errormsg is",errormsg))$
1129 (%i2) errormsg:true;
1133 value of errormsg is true
1136 (%i4) errormsg:false;
1139 value of errormsg is false
1145 @c AT LEAST SHOULD LIST VARIANTS HERE
1147 @c --- 25.12.2010 DK -----------------------------------------------------------
1149 @deffn {Spezieller Operator} for
1151 @c Used in iterations. See @code{do} for a description of Maxima's iteration
1154 Anweisung f@"ur Interationen. Siehe die @mref{do}-Anweisung f@"ur eine
1155 Beschreibung der Iterationsm@"oglichkeiten von Maxima.
1158 @c --- 25.12.2010 DK -----------------------------------------------------------
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}.
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:
1172 block ([x], x:1, loop, x+1, ..., go(loop), ...)
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
1184 @c NEEDS CLARIFICATION, EXPANSION, EXAMPLES
1185 @c THIS ITEM IS IMPORTANT
1187 @c --- 25.12.2010 DK -----------------------------------------------------------
1189 @deffn {Spezieller Operator} if
1191 @c Represents conditional evaluation. Various forms of @code{if} expressions are
1194 Ist die bedingte Anweisung. Verschiedene Formen einer bedingten Anweisung sind
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
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)
1268 Operation Symbol Typ
1270 less than < relational infix
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
1278 or equal to relational infix
1279 greater than > relational infix
1280 and and logical infix
1282 not not logical prefix
1286 @c --- 27.12.2010 DK -----------------------------------------------------------
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
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
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
1329 Eine lokale Funktionsdefinition.
1332 (%i1) foo (x) := 1 - x;
1333 (%o1) foo(x) := 1 - x
1336 (%i3) block (local (foo), foo (x) := 2 * x, foo (100));
1343 @c --- 27.12.2010 DK -----------------------------------------------------------
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.
1354 @c --- 27.12.2010 DK -----------------------------------------------------------
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
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.
1366 @c --- 23.12.2010 Dk -----------------------------------------------------------
1369 @deffn {Spezieller Operator} while
1370 @deffnx {Spezieller Operator} unless
1374 Siehe den Operator @mrefdot{do}
1377 @c --- End of file Program.de.texi ---------------------------------------------