Steuerung der Evaluierung |
Das im Quellcode-Modus erscheinende Menü
<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
<assign|theorem|<macro|body|<surround|<no-indent><strong|Theorem. >|<right-flush>|body>>>
Dann wird dieser Ausdruck evaluiert. Das definiert das Makro
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
<assign|foo|<macro|x|<blah|x|x>>>
dem folgenden
(define-macro (foo x)
‘(let ((x (lambda () ,x)))
(blah (x) (x)))
Umgekehrt gehören zu dem folgenden
(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