[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26. Laufzeitumgebung


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.1 Initialisierung von Maxima

Wenn Maxima startet, werden die beiden Dateien maxima-init.mac und maxima-init.lisp automatisch geladen, sofern diese vorhanden sind. Die Datei maxima-init.mac wird mit der Funktion batchload von Maxima geladen und kann beliebige Maxima-Ausdrücke enthalten, die beim Starten von Maxima ausgeführt werden. Die Datei maxima-init.lisp wird mit der Funktion load geladen und kann entsprechende Lisp-Anweisungen enthalten. Beide Dateien erlauben es dem Nutzer, globale Variablen zu setzen, Funktionen zu definieren oder sonstige Aktionen auszuführen, um zum Beispiel die Maxima-Umgebung anzupassen.

Die Dateien maxima-init.mac und maxima-init.lisp können in jedem Verzeichnis abgelegt werden, das von der Funktion file_search gefunden wird. Üblicherweise wird das Verzeichnis gewählt, das in der Optionsvariablen maxima_userdir enthalten ist und die von Maxima beim Starten entsprechend dem Betriebssystem mit einem Standardwert initialisiert wird.

Beispiel:

Im Folgenden wird ein Beispiel für den Inhalt einer Datei maxima-init.mac gezeigt. In diesem Beispiel werden einige globale Werte auf neue Anfangswerte gesetzt.

/* maxima-init.mac */
print(" Lade ", file_search("maxima-init.mac"), " ...")$
linel:65$      /* 65 Zeichen pro Zeile */
leftjust:true$ /* Linksbündige Ausgabe */
algebraic:true$ /* Vereinfache algebraische Zahlen */
fpprec:25$      /* große Gleitkommazahlen mit 25 Stellen */
print (" maxima-init.mac ist geladen.")$

Die Optionsvariable maxima_userdir enthält ein geeignetes Verzeichnis, um die Datei maxima-init.mac abzulegen. Mit der Funktion file_search kann geprüft werden, ob die Datei von Maxima gefunden wird.

(%i1) maxima_userdir;
(%o1)                 /home/dieter/.maxima
(%i2) file_search("maxima-init.mac");
(%o2)         /home/dieter/.maxima/maxima-init.mac

Im Folgenden wird Maxima mit einer Datei maxima-init.mac gestartet, die die oben angegebenen Maxima Kommandos enthält.

dieter@dieter:~/Maxima/maxima$ rmaxima
Maxima 5.25.1 http://maxima.sourceforge.net
Mit Lisp SBCL 1.0.53
Lizensiert unter der GNU Public License. Siehe die Datei COPYING.
Gewidmet dem Andenken an William Schelter.
Die Funktion bug_report() gibt Informationen zum Berichten von Fehlern.
 Lade  /home/dieter/.maxima/maxima-init.mac  ... 
 maxima-init.mac ist geladen. 
(%i1) 

Die Sitzung wird fortgesetzt, die Variablen enthalten die gewünschten neuen Standardwerte und die Anzeige ist linksbündig formatiert.

(%i1) linel;
(%o1) 65
(%i2) algebraic;
(%o2) true
(%i3) fpprec;
(%o3) 25

Hinweis:

Mit dem Kommando reset werden die Optionsvariablen nicht auf die Werte der Datei maxima-init.mac zurückgesetzt, sondern auf die ursprünglichen in Maxima festgelegten Standardwerte. Wird das Kommando kill ausgeführt, gehen weiterhin alle in der Initialisierungsdatei definierten Variablen und Funktionen verloren. In beiden Fällen muss die Datei maxima-init.mac erneut zum Beispiel mit der Funktion load geladen werden.

Die obige Sitzung wird fortgesetzt. Die Variablen werden mit reset zurückgesetzt. Dann wird die Datei maxima-init.mac mit der Funktion load geladen.

(%i4) reset();
(%o1) [features, fpprec, _, __, labels, %, linenum, algebraic, 
                                   tr-unique, leftjust, lispdisp]
(%i2) fpprec;
(%o2)                          16
(%i3) load("maxima-init.mac");
 Lade  /home/dieter/.maxima/maxima-init.mac  ... 
 maxima-init.mac ist geladen. 
(%o3) /home/dieter/.maxima/maxima-init.mac
(%i4) fpprec;
(%o4) 25

Die obigen Ausführungen treffen auf gleiche Weise auf die Datei maxima-init.lisp zu, wobei in diesem Fall die Datei Lisp-Anweisungen enthält.

Beispiel:

Das folgende Beispiel zeigt die Übersetzung des obigen Beispiels für die Datei maxima-init.mac in Lisp-Anweisungen.

;;; maxima-init.lisp
(format t " Lade ~A ...~%" ($file_search "maxima-init.lisp"))
(setq $linel 65)
(setq $leftjust t)
(setq $algebraic t)
(setq $fpprec 25)
(fpprec1 nil $fpprec)
(format t " maxima-init.lisp ist geladen.~%")

Die Datei maxima-init.lisp ist im besonderen dazu geeignet, einen Patch in Maxima einzuspielen, um einen Programmierfehler zu beheben.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.2 Interrupts

Eine Berechnung kann mit dem Kommando ^c (control-c) abgebrochen werden. Standardmäßig kehrt Maxima zu der Eingabeaufforderung der Konsole zurück. In diesem Fall ist es nicht möglich, die Berechnung fortzusetzen.

Beispiel:

Eine lange Rechnung wird mit ^c abgebrochen. Maxima kehrt zur Eingabeaufforderung zurück.

(%i1) factor(factorial(10000))$

Maxima encountered a Lisp error:
 Interactive interrupt at #x9224192.

Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.
(%i2) 

Wird die Lisp-Variable *debugger-hook* mit dem Kommando :lisp (setq *debugger-hook* nil) auf den Wert nil gesetzt, dann startet Maxima den Lisp-Debugger, wenn das Kommando ^c ausgeführt wird. Mit dem Kommando continue im Lisp-Debugger kann die unterbrochene Berechnung fortgesetzt werden.

Beispiel:

Die Variable *debugger-hook* wird auf den Wert nil gesetzt. Der Abbruch der Rechnung startet in diesem Fall den Lisp-Debugger. Die Rechnung kann mit der Auswahl 0 für das Kommando continue fortgesetzt werden.

(%i2) :lisp (setq *debugger-hook* nil)
NIL
(%i2) factor(factorial(10000))$

debugger invoked on a SB-SYS:INTERACTIVE-INTERRUPT
     in thread #<THREAD
     "initial thread" RUNNING
     {C597F49}>:
  Interactive interrupt at #x9224192.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [CONTINUE    ] Return from SB-UNIX:SIGINT.
  1: [MACSYMA-QUIT] Maxima top-level
  2: [ABORT       ] Exit debugger, returning to top level.

(SB-BIGNUM:BIGNUM-TRUNCATE #<unavailable argument>
                           #<unavailable argument>)
0] 0

(%i3) 

Hinweis:

Mit dem Kommando :lisp (setq *debugger-hook* 'maxima-lisp-debugger) kann das Standardverhalten von Maxima wiederhergestellt werden.

In Unix-Systemen kann die Ausführung auch mit Kommando ^z (control-z) abgebrochen werden. In diesem Fall wird eine Unix-Shell gestartet. Das Kommando fg kehrt zu Maxima zurück.

Wie mit dem Kommando ^c kann auch ein Lisp-Fehler zu einem Abbruch der Berechnung führen. Maxima meldet den Lisp-Fehler und kehrt standardmäßig zu der Eingabeaufforderung zurück. Wurde die Lisp-Variable *debugger-hook* auf den Wert nil gesetzt, startet Maxima den Lisp-Debugger.

Beispiel:

Es wird eine Lisp-Funktion $sqr definiert, die aus Maxima mit sqr aufgerufen werden kann und ihr Argument quadriert. Wird die Funktion mit mehr als einem Argument aufgerufen, wird ein Lisp-Fehler generiert und Maxima kehrt zu der Eingabeaufforderung zurück.

(%i1) :lisp (defun $sqr (x) (* x x))
$SQR
(%i1) sqr(3);
(%o1)                           9
(%i2) sqr(2,3);

Maxima encountered a Lisp error:

 invalid number of arguments: 2

Automatically continuing.
To enable the Lisp debugger set *debugger-hook* to nil.

(%i3)

Jetzt wird die Lisp-Variable *debugger-hook* auf den Wert nil gesetzt. In diesem Fall wird der Lisp-Debugger aufgerufen. Die Ausführung kann in diesem Fall nicht mit dem Kommando continue fortgesetzt werden, da ein Syntax-Fehler aufgetreten ist. Jedoch ist es möglich, Maxima mit dem Kommando (run) vom Lisp-Prompt neu zu starten.

(%i3) :lisp (setq *debugger-hook* nil)
NIL
(%i3) sqr(2,3);

debugger invoked on a SB-INT:
   SIMPLE-PROGRAM-ERROR in thread #<THREAD
   "initial thread" RUNNING {C597F49}>:
  invalid number of arguments: 2

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [MACSYMA-QUIT] Maxima top-level
  1: [CONTINUE    ] Ignore runtime option --eval "(cl-user::run)".
  2: [ABORT       ] Skip rest of --eval and --load options.
  3:                Skip to toplevel READ/EVAL/PRINT loop.
  4: [QUIT        ] Quit SBCL (calling #'QUIT, killing the process).

($SQR 2)[:EXTERNAL]
0] continue

* (run)
Maxima restarted.
(%i4)

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

26.3 Funktionen und Variablen der Laufzeitumgebung

Systemvariable: maxima_tempdir

Die Systemvariable maxima_tempdir enthält das Verzeichnis, in dem Maxima temporäre Dateien ablegt. Insbesondere werden temporäre Grafikausgaben von Funktionen wie plot2d und plot3d in diesem Verzeichnis abgelegt. Der Standardwert von maxima_tempdir ist das Home-Verzeichnis des Nutzers, sofern Maxima dieses feststellen kann. Andernfalls initialisiert Maxima die Systemvariable maxima_tempdir mit einer geeigneten Annahme.

Der Systemvariablen maxima_tempdir kann eine Zeichenkette zugewiesen werden, die ein Verzeichnis bezeichnet.

Systemvariable: maxima_userdir

Die Systemvariable maxima_userdir enthält ein Verzeichnis, das Maxima durchsucht, um Maxima- oder Lisp-Dateien zu finden. Der Standardwert der Systemvariablen maxima_userdir ist ein Unterverzeichnis des Home-Verzeichnis des Nutzers, sofern Maxima dieses bestimmen kann. Ansonsten initialisiert Maxima die Systemvariable maxima_userdir mit einer geeigneten Annahme. Dieses Verzeichnis ist zum Beispiel geeignet, um die Initialisisierungsdateien maxima-init.mac und maxima-init.lisp abzulegen.

Maxima sucht in weiteren Verzeichnissen nach Dateien. Die vollständige Liste der Suchverzeichnisse ist den Variablen file_search_maxima und file_search_lisp enthalten.

Der Systemvariablen maxima_userdir kann eine Zeichenkette zugewiesen werden, die ein Verzeichnis bezeichnet. Wenn der Wert von maxima_userdir geändert wird, werden die Variablen file_search_maxima und file_search_lisp nicht automatisch angepasst.

Funktion: room ()
Funktion: room (true)
Funktion: room (false)

Gibt eine Beschreibung der Speicherplatznutzung aus. Die Darstellung und der Inhalt der Beschreibung hängt von dem Maxima zugrunde liegendem Lisp ab. Mit den Argumenten true und false kann der Umfang der auszugebenden Information kontrolliert werden, sofern die Option vom verwendeten Lisp unterstützt wird. Mit dem Argument true wird die umfangreichste Darstellung ausgegeben und mit dem Argument false die kürzeste.

Beispiel:

Das folgende Beispiel zeigt die Ausgabe auf einem Linux-System mit der Lisp-Implementierung SBCL 1.0.45.

(%i1) room(false);
Dynamic space usage is:   63,719,856 bytes.
Read-only space usage is:      3,512 bytes.
Static space usage is:         2,256 bytes.
Control stack usage is:        1,440 bytes.
Binding stack usage is:          184 bytes.
Control and binding stack usage is for the current thread only.
Garbage collection is currently enabled.
(%o2)                         false

Funktion: sstatus (keyword, item)

Hat das Argument keyword den Wert feature, wird das Argument item der internen Lisp-Eigenschaftsliste *features* hinzugefügt. Das Kommando status(feature, item) hat dann das Ergebnis true. Hat das Argument keyword den Wert nofeature, wird das Argument item von der internen Lisp-Eigenschaftsliste *features* entfernt.

Siehe auch die Funktion status.

Funktion: status (feature)
Funktion: status (feature, item)

Das Kommando status(feature) gibt die interne Lisp-Eigenschaftsliste *features* zurück. status(feature,item) gibt true zurück, wenn das Argument item in der internen Lisp-Eigenschaftsliste *features* enthalten ist. Ansonsten ist die Rückgabe false. status wertet die Argumente nicht aus. Eine Systemeigenschaft item, die Sonderzeichen wie - oder * enthält, muss als Zeichenkette angegeben werden.

Siehe auch die Funktion sstatus.

Die Lisp-Variable *features* steht in keinem Zusammenhang mit der Maxima-Systemvariablen features, die eine Liste mit mathematischen Eigenschaften enthält, die Funktionen und Variablen erhalten können.

Beispiel:

Das folgende Beispiel zeigt die Ausgabe für ein Linux-System mit SBCL als Lisp. Die Ausgabe ist abgekürzt.

(%i1) status(feature);
(%o1) [sb-bsd-sockets-addrinfo, asdf2, asdf, cl, mk-defsystem, 
cltl2, ansi-cl, common-lisp, sbcl, ...]

(%i2) status(feature,"ansi-cl");
(%o2)                         true

Funktion: system (command)

system(command) führt das Kommando command in einem eigenen Prozess aus. Das Kommando wird an die Standard-Shell übergeben. system wird nicht von allen Betriebssystemen unterstützt, steht aber im Allgemeinen unter Unix oder Unix ähnlichen Betriebssystemen zur Verfügung.

Funktion: time (%o1, %o2, %o3, …)

Gibt eine Liste mit den Ausführungszeiten zurück, die benötigt wurden, um die Ergebnisse %o1, %o2, %o3, … zu berechnen. Die Argumente der Funktion time können nur Ausgabemarken sein. Für andere Argumente ist das Ergebnis unknown.

Siehe die Optionsvariable showtime, um die Ausführungszeiten für jede einzelne Berechnung anzuzeigen.

Beispiel:

Die Zeit für die Berechnung der Fakultät einer großen ganzen Zahl wird mit time ausgegeben.

(%i1) factorial(100000)$

(%i2) time(%o1);
(%o2)                        [7.589]

Funktion: timedate ()

Gibt eine Zeichenkette zurück, die das aktuelle Datum und die aktuelle Zeit enthält. Die Zeichenkette hat das Format yyyy-mm-dd HH:MM:SS (GMT-n).

Beispiel:

(%i1) timedate();
(%o1)               2010-12-28 21:56:32+01:00

Funktion: absolute_real_time ()

Gibt die Sekunden zurück, die seit dem 1. Januar 1990 UTC verstrichen sind. Die Rückgabe ist eine ganze Zahl.

Siehe auch elapsed_real_time und elapsed_run_time.

Beispiel:

(%i1) absolute_real_time ();
(%o1)                      3502559124
(%i2) truncate(1900+absolute_real_time()/(365.25*24*3600));
(%o2)                         2010

Funktion: elapsed_real_time ()

Gibt die Sekunden zurück, die seit dem letzten Start von Maxima verstrichen sind. Die Rückgabe ist eine Gleitkommazahl.

Siehe auch absolute_real_time und elapsed_run_time.

Beispiel:

(%i1) elapsed_real_time ();
(%o1)                       2.559324
(%i2) expand ((a + b)^500)$
(%i3) elapsed_real_time ();
(%o3)                       7.552087

Funktion: elapsed_run_time ()

Gibt eine Schätzung der Zeit in Sekunden zurück, die Maxima für Berechnungen seit dem letzten Start benötigt hat. Der Rückgabewert ist eine Gleitkommazahl.

Siehe auch absolute_real_time und elapsed_real_time.

Beispiel:

(%i1) elapsed_run_time ();
(%o1)                         0.04
(%i2) expand ((a + b)^500)$
(%i3) elapsed_run_time ();
(%o3)                         1.26

[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Robert on Juli, 9 2012 using texi2html 1.76.