Steuerung der Evaluierung

Das im Quellcode-Modus erscheinende Menü QuellcodeAuswertung enhält eine Anzahl von Konstrukten, mit denen sich die Evaluierung von Ausdrücken der Stil-Definitions-Sprache steuern lässt. Die wichtigste Anwendung solcher Konstrukte ist der Gebrauch in „Meta-Makros”, die Makros als Argumente nehmen, um diese zu ändern wie z.B. das unten definierte new-theorem:

<assign|new-theorem|<macro|name|text|<quasi|<assign|<unquote|name>|<macro|body|<surround|<no-indent><strong|<unquote|text>. >|<right-flush>|body>>>>>>

Mit dem Aufruf <new-theorem|theorem|Theorem>, werden zuerst alle unquote-Befehle innerhalb des quasi-Konstrukts ausgeführt, was zuu folgendem Ausdruck führt:

<assign|theorem|<macro|body|<surround|<no-indent><strong|Theorem. >|<right-flush>|body>>>

Dann wird dieser Ausdruck evaluiert. Das definiert das Makro theorem.

Man beachte, dass TeXmacs-Evaluierungsregeln sich etwas von den Scheme-Regeln unterscheiden. Diese geringfügigen Unterschiede sollen es dem Anwender besonders leicht machen, Makros für den Schriftsatz zu schreiben.

Beipielsweise, wenn TeXmacs ein Makro <macro|x1||xn|body> mit den Argumenten y1 bis yn aufruft, bleiben die Argumentvariablen x1 bis xn an die unevaluierten Ausdrücke y1 bis yn gebunden bis der Rumpf, body, mit diesen Bindungen evaluiert worden ist. Die Evaluierung von yi wird jedesmal durchgeführt, wenn das Argument xi aufgerufen wird. Wenn also ein Makro <macro|x|x und nochmal x> auf den Ausdruck y angewandt wird, wird der Ausdruck y genau zweimal ausgewertet.

In Scheme werden die Rümpfe von Scheme-Makros zweimal evaluiert, während bei Funktionen die Argumente evaluiert werden. Dagegen wird, wenn auf eine Variable zugegriffen wird, der Wert nicht evaluiert, gleichgültig, ob es sich um ein Argument oder eine Kontext-Variable handelt. Daher entspricht das TeXmacs-Makro

<assign|foo|<macro|x|<blah|x|x>>>

dem folgenden Scheme-Makro:

(define-macro (foo x)

‘(let ((x (lambda () ,x)))

(blah (x) (x)))

Umgekehrt gehören zu dem folgenden Scheme-Makro bzw. -Funktion

(define-macro (foo x) (blah x x))

(define (fun x) (blah x x))

die folgenden TeXmacs-Analoga:

<document|<assign|foo|<macro|x|<eval|<blah|<quote-arg|x>|<quote-arg|x>>>>>>

<document|<assign|fun|<macro|x|<with|x*|x|<blah|<quote-value|x*>|<quote-value|x*>>>>>>

Hier wurden die Konstrukte quote-arg und quote-value dazu benutzt Argumente bzw. Kontext-Variable aufzurufen. Die TeXmacs-Konstrukte eval, quote, quasiquote und unquote verhalten sich wie ihre Scheme-Analoga. Das quasi-Konstrukt ist eine Abkürzung für quasiquote gefolgt von Evaluierung.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".