Nächste: Einführung in die Programmierung, Vorige: Programmierung, Nach oben: Programmierung [Inhalt][Index]
Maxima ist in Lisp programmiert. Es ist einfach, Lisp-Funktionen und
Lisp-Variable in Maxima zu verwenden. Umgekehrt können Maxima-Funktionen und
Maxima-Variablen in Lisp verwendet werden. Ein Lisp-Symbol, das mit einem
Dollarzeichen $
beginnt, entspricht einem Maxima-Symbol ohne einem
Dollarzeichen. Umgekehrt entspricht einem Maxima-Symbol, das mit einem
Fragezeichen ?
beginnt, ein Lisp-Symbol ohne das Fragezeichen.
Zum Beispiel entspricht dem Maxima-Symbol foo
das Lisp-Symbol
$foo
und dem Maxima-Symbol ?foo
entspricht das Lisp-Symbol
foo
.
Speziellen Zeichen wie einem Trennstrich -
oder einem Stern *
in
Lisp-Symbolen muss ein Backslash \
vorangestellt werden, um diese
in Maxima zu verwenden. Zum Beispiel entspricht dem Lisp-Symbol
*foo-bar*
das Maxima-Symbol ?\*foo\-bar\*
.
Im Gegensatz zu Lisp unterscheidet Maxima Groß- und Kleinschreibung. Es gibt einige Regeln, die eine Übersetzung von Namen zwischen Lisp und Maxima betreffen:
$foo
, $FOO
und $Foo
jeweils der
Maxima-Bezeichner foo
.
|$FOO|
und |$foo|
die
Maxima-Bezeichner foo
und FOO
.
|$Foo|
der
Maxima-Bezeichner Foo
.
Für die Syntax von Maxima-Bezeichnern siehe auch Bezeichner.
Lisp-Code kann mit dem Unterbrechungskommando :lisp
von einer
Maxima-Kommandozeile ausgeführt werden. Siehe
Debugger-Kommandos für weitere Unterbrechungskommandos und deren
Beschreibung.
Beispiele:
Addiere die Werte der Maxima-Variablen x
und y
mit dem
Lisp-Operator +
.
(%i1) x:10$ y:5$ (%i3) :lisp (+ $x $y) 15
Addiere die Symbole a
und b
mit der Lisp-Funktion ADD
. Das
Ergebnis wird der Variablen $RES
zugewiesen. Die Variable hat in Maxima
den Namen res
.
(%i3) :lisp (setq $res (add '$a '$b)) ((MPLUS SIMP) $A $B) (%i3) res; (%o3) b + a
Das :lisp
-Kommando ist nützlich, um zum Beispiel Lisp-Eigenschaften
von Maxima-Symbolen anzuzeigen, globale Lisp-Variablen wie
*PRINT-CIRCLE*
zu setzen oder wie im letzten Beispiel die interne
Form von Maxima-Ausdrücken anzuzeigen.
(%i4) :lisp (symbol-plist 'mabs) (TEXSYM ((\left| ) \right| ) TEX TEX-MATCHFIX REAL-VALUED T MAPS-INTEGERS-TO-INTEGERS T DIMENSION DIM-MABS TRANSLATE #<FUNCTION (LAMBDA #) {972D045}> FLOATPROG MABSBIGFLOAT INTEGRAL ((X) #<FUNCTION ABS-INTEGRAL>) OPERATORS SIMPABS DISTRIBUTE_OVER (MLIST $MATRIX MEQUAL) NOUN $ABS REVERSEALIAS $ABS GRAD ((X) ((MTIMES) X ((MEXPT) ((MABS) X) -1)))) (%i4) :lisp (setq *print-circle* nil) NIL (%i4) 'integrate(t*sin(t), t);
/ [ (%o4) I t sin(t) dt ] /
(%i5) :lisp $% ((%INTEGRATE SIMP) ((MTIMES SIMP) $T ((%SIN SIMP) $T)) $T)
Das Kommando :lisp
kann in einer Kommandozeile und in Dateien verwendet
werden, die mit den Funktionen batch
oder demo
geladen werden.
Dagegen kann das Kommando :lisp
nicht in Dateien verwendet werden, die
mit den Funktionen load
, batchload
,
translate_file
oder compile_file
geladen werden.
Das Lisp-Makro #$
erlaubt die Nutzung von Maxima-Ausdrücken in
Lisp-Code. #$expr$
wird zu einem Lisp-Ausdruck expandiert, der
dem Maxima-Ausdruck expr entspricht.
Beispiele:
Die beiden folgenden Beispiele zeigen die Zuweisung an eine Variable var
.
Im ersten Beispiel werden Lisp- und Maxima-Code gemischt. Für die Zuweisung
an die Variable wird die Lisp-Funktion MSETQ
aufgerufen. Das Makro
#$
transformiert den Maxima Ausdruck sin(x) + a^2
in die Lisp-Form
((MPLUS SIMP) ((MEXPT SIMP) $A 2) ((%SIN SIMP) $X))
. Dies entspricht
dem im zweiten Beispiel gezeigten Maxima-Kommando.
(%i1) :lisp (msetq $var #$sin(x)+a^2$) ((MPLUS SIMP) ((MEXPT SIMP) $A 2) ((%SIN SIMP) $X)) (%i1) var: sin(x)+a^2;
2 (%o1) sin(x) + a
In diesem Beispiel wird zunächst ein Maxima-Ausdruck der Variablen $VAR
zugewiesen und dann mit der Lisp-Funktion DISPLA
ausgegeben.
(%i1) :lisp (setq $var #$'integrate(f(x), x)$) ((%INTEGRATE SIMP) (($F SIMP) $X) $X) (%i1) :lisp (displa $var) / [ I f(x) dx ] / NIL
Maxima-Funktionen sind keine Lisp-Funktionen. Um eine Maxima-Funktion in
Lisp-Code aufzurufen, kann die Lisp-Funktion MFUNCALL
aufgerufen werden.
(%i1) f(x,y) := x^2 + sin(y)$ (%i2) :lisp (mfuncall '$f '$a 10) ((MPLUS SIMP) ((%SIN SIMP) 10) ((MEXPT SIMP) $A 2))
Mit dem Kommando to_lisp()
kann von einer Maxima-Kommandozeile eine
Lisp-Sitzung geöffnet werden. Mit dem Kommando (TO-MAXIMA)
wird
die Lisp-Sitzung beendet und nach Maxima zurückgekehrt. Siehe auch
to_lisp
für ein Beispiel.
Die folgenden Lisp-Funktionen können in Maxima nicht verwendet werden:
complement
,
continue
,
/
,
float
,
functionp
,
array
,
exp
,
listen
,
signum
,
atan
,
asin
,
acos
,
asinh
,
acosh
,
atanh
,
tanh
,
cosh
,
sinh
,
tan
,
break
,
und gcd
.
Nächste: Einführung in die Programmierung, Vorige: Programmierung, Nach oben: Programmierung [Inhalt][Index]