Nächste: Programmierung, Vorige: Funktionsdefinitionen [Inhalt][Index]
Nächste: Interrupts, Vorige: Laufzeitumgebung, Nach oben: Laufzeitumgebung [Inhalt][Index]
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.
Nächste: Funktionen und Variablen der Laufzeitumgebung, Vorige: Initialisierung von Maxima, Nach oben: Laufzeitumgebung [Inhalt][Index]
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)
Vorige: Interrupts, Nach oben: Laufzeitumgebung [Inhalt][Index]
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.
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.
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
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
.
feature
) ¶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
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.
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]
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
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
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
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
Nächste: Programmierung, Vorige: Funktionsdefinitionen [Inhalt][Index]