Maxima eval_when is calqued on Common Lisp eval-when, whose
documentation<http://www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/speope_eval-when.html>might
be useful.
-s
2011/10/2 Dieter Kaiser <drdieterkaiser at web.de>
> Because of a bug report, I have figured out the functionality of the
> Maxima function eval_when. I have written a documentation in German.
> Perhaps, someone can help to translate this documentation in the English
> language.
>
> At this time, there is a lot of additionally information in the German
> manual, which could be translated in English. I would appreciate any
> help to translate more documentation. If someone is interested to help;
> the German manual is available at
> http://crategus.users.sourceforge.net/maxima.html
>
> This is the documentation for the function eval_when in German:
>
> -- Funktion: eval_when (<keyword>, <expr_1>, ..., <expr_n>)
> -- Funktion: eval_when ([<keyword_1>, <keyword_2>, ...], <expr_1>,
> ..., <expr_n>)
> Ein Ausdruck mit der Funktion `eval_when' wird an oberster Stelle
> in einer Datei definiert und erlaubt die bedingte Auswertung von
> Ausdr?cken beim Laden, ?bersetzen oder Kompilieren einer Datei.
> Das Argument <keyword> ist eines der Schl?sselworte `batch',
> `translate', `compile' oder `loadfile'. Das erste Argument kann
> ein einzelnes Schl?sselwort oder ein Liste mit mehreren
> Schl?sselworten sein. Trifft die mit dem Schl?sselwort angegebene
> Bedingung zu, wird eine oder mehrere der folgenden Aktionen
> ausgef?hrt:
>
> `batch'
> Wird die Datei mit einer der Funktionen `load', `batch',
> `batchload' oder `demo' geladen und ist `batch' in der
> Liste der Schl?sselworte enthalten, dann werden die Ausdr?cke
> <expr1>, ..., <expr_n> genau einmal beim Laden der Datei
> ausgewertet. Die R?ckgabe der Funktion `eval_when' ist ein
> Ausdruck `evaluated_when(<result)>', wobei <result> das
> Ergebnis der Auswertung ist. Ist das Schl?sselwort `batch'
> nicht vorhanden, ist die R?ckgabe das Symbol
> `not_evaluated_when'.
>
> `translate'
> Wird die Datei mit dem Kommando `translate_file' oder
> `compile_file' geladen und ist `translate' unter den
> Schl?sselworten, dann werden die Ausdr?cke <expr_1>, ...,
> <expr_n> sofort ausgewertet. Seiteneffekte wie Zuweisungen
> von Werten an Optionsvariablen oder Deklarationen sind f?r
> die folgende ?bersetzung der Datei nach Lisp wirksam. Die
> Ausdr?cke sind jedoch nicht Teil des ?bersetzten Programms.
>
> `loadfile'
> Wird die Datei mit dem Kommando `translate_file' oder dem
> Kommando `compile_file' geladen und ist `loadfile' unter den
> Schl?sselworten, dann werden die Ausdr?cke <expr_1>, ...,
> <expr_n> nach Lisp ?bersetzt und als Block der Form `(PROGN
> EXPR_1 ... EXPR_N)' in das Lisp Programm eingesetzt. Hier
> sind die Anweisungen <EXPR_I> die nach Lisp ?bersetzten
> Maxima-Ausdr?cke <expr_i>.
>
> `compile'
> Wird die Datei mit dem Kommando `translate_file' oder
> `compile_file' geladen und ist `compile' unter den
> Schl?sselworten, dann werden die Ausdr?cke <expr_1>, ...,
> <expr_n> nach Lisp ?bersetzt und als eine Lisp-Anweisung in
> das Lisp-Programm eingesetzt, die die Form `(EVAL-WHEN
> (:COMPILE-TOPLEVEL) (EXPR_1 ... EXPR_N))' hat. Das
> Schl?sselwort `compile' kann nicht mit dem Schl?sselwort
> `loadfile' in einem `eval_when'-Ausdruck kombiniert werden.
> In diesem Fall wird das Schl?sselwort `compile' ignoriert.
>
> Beispiele:
>
> F?r die folgende Beispiele ist eine Datei mit den Namen
> `eval_when.mac' definiert, die verschiedene `eval_when'-Anweisungen
> enth?lt.
>
> (%i1) file: file_search("eval_when.mac");
> (%o1) /home/dieter/.maxima/eval_when.mac
> (%i2) printfile(file);
>
> eval_when(batch, print("called in mode BATCH"));
> eval_when(loadfile, print("called in mode LOADFILE"));
> eval_when(compile, print("called in mode COMPILE"));
> eval_when(translate, print("called in mode TRANSLATE"));
>
> (%o2) /home/dieter/.maxima/eval_when.mac
>
> Die Datei wird mit dem Kommando `load' geladen. Die Anweisung mit
> dem Schl?sselwort `batch' wird beim Laden einmal ausgef?hrt.
>
> (%i1) file: file_search("eval_when.mac");
> (%o1) /home/dieter/.maxima/eval_when.mac
> (%i2) load(file);
> called in mode BATCH
> (%o2) /home/dieter/.maxima/eval_when.mac
>
> In diesem Fall wird die Datei mit dem Befehl `batch' geladen. Die
> Anweisung mit dem Schl?sselwort `batch' wird einmal ausgef?hrt.
> Die anderen `eval_when'-Anweisungen werten jeweils zum Ergebnis
> `not_evaluated_when' aus.
>
> (%i3) batch(file);
>
> read and interpret file: /home/dieter/.maxima/eval_when.mac
> (%i4) eval_when(batch, print(called in mode BATCH))
> called in mode BATCH
> (%o4) evaluated_when(called in mode BATCH)
> (%i5) eval_when(loadfile, print(called in mode LOADFILE))
> (%o5) not_evaluated_when
> (%i6) eval_when(compile, print(called in mode COMPILE))
> (%o6) not_evaluated_when
> (%i7) eval_when(translate, print(called in mode TRANSLATE))
> (%o7) not_evaluated_when
> (%o7) /home/dieter/.maxima/eval_when.mac
>
> Jetzt wird die Datei mit dem Kommando `translate_file' geladen und
> nach Lisp ?bersetzt. Der Ausdruck mit dem Schl?sselwort
> `translate' wird sofort ausgewertet. Das ?bersetzte Programm wird
> in die Ausgabedatei `eval_when.LISP' geschrieben. Die
> `eval_when'-Anweisung zum Schl?sselwort wird nicht ausgewertet.
>
> (%i1) file: file_search("eval_when.mac");
> (%o1) /home/dieter/.maxima/eval_when.mac
> (%i2) translate_file(file);
> translator: begin
> translating /home/dieter/.maxima/eval_when.mac.
> called in mode TRANSLATE
> (%o2) [/home/dieter/.maxima/eval_when.mac,
> /home/dieter/.maxima/eval_when.LISP,
> /home/dieter/.maxima/eval_when.UNLISP]
>
> Dies ist der Inhalt der Ausgabedatei `eval_when.LISP'. Die
> Ausgabedatei enth?lt eine `PROGN'-Anweisung mit dem Ausdruck
> `($print '"called in mode LOADFILE")' f?r den `eval_when'-Ausdruck
> zum Schl?sselwort `loadfile' sowie eine `EVAL-WHEN'-Anweisung mit
> dem Ausdruck `($print '"called in mode COMPILE")' f?r den
> `eval_when'-Ausdruck mit dem Schl?sselwort `compile'.
>
> ;;; -*- Mode: Lisp; package:maxima; syntax:common-lisp ;Base: 10
> -*- ;;;
> ;;; Translated on: 2011-10-02 13:35:37+02:00
> ;;; Maxima version: 5.25post
> ;;; Lisp implementation: SBCL
> ;;; Lisp version: 1.0.45
> (in-package :maxima)
>
> [...]
>
> nil
> (progn ($print '"called in mode LOADFILE"))
> (eval-when (:compile-toplevel) ($print '"called in mode COMPILE"))
> nil
>
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>