mirror of https://github.com/texmacs/doc.git
109 lines
4.0 KiB
Plaintext
109 lines
4.0 KiB
Plaintext
|
<TeXmacs|1.0.4.5>
|
|||
|
|
|||
|
<style|tmdoc>
|
|||
|
|
|||
|
<\body>
|
|||
|
<tmdoc-title|Steuerung der Evaluierung>
|
|||
|
|
|||
|
Das im Quellcode-Modus erscheinende Men<65> <menu|Source|Evaluation> enh<6E>lt
|
|||
|
eine Anzahl von Konstrukten, mit denen sich die Evaluierung von Ausdr<64>cken
|
|||
|
der Stil-Definitions-Sprache steuern l<>sst. Die wichtigste Anwendung
|
|||
|
solcher Konstrukte ist der Gebrauch in \RMeta-Makros'', die Makros als
|
|||
|
Argumente nehmen, um diese zu <20>ndern wie z.B. das unten definierte
|
|||
|
<markup|new-theorem>:\
|
|||
|
|
|||
|
<\tm-fragment>
|
|||
|
<inactive*|<assign|new-theorem|<macro|name|text|<quasi|<assign|<unquote|name>|<macro|body|<surround|<no-indent><strong|<unquote|<arg|text>>.
|
|||
|
>|<right-flush>|<arg|body>>>>>>>>
|
|||
|
</tm-fragment>
|
|||
|
|
|||
|
Mit dem Aufruf <inactive*|<new-theorem|theorem|Theorem>>, werden zuerst
|
|||
|
alle <markup|unquote>-Befehle innerhalb des <markup|quasi>-Konstrukts
|
|||
|
ausgef<65>hrt, was zuu folgendem Ausdruck f<>hrt:\
|
|||
|
|
|||
|
<\tm-fragment>
|
|||
|
<inactive*|<assign|theorem|<macro|body|<surround|<no-indent><strong|Theorem.
|
|||
|
>|<right-flush>|<arg|body>>>>>
|
|||
|
</tm-fragment>
|
|||
|
|
|||
|
Dann wird dieser Ausdruck evaluiert. Das definiert das Makro
|
|||
|
<markup|theorem>.
|
|||
|
|
|||
|
Man beachte, dass <TeXmacs>-Evaluierungsregeln sich etwas von den
|
|||
|
Scheme-Regeln unterscheiden. Diese geringf<67>gigen Unterschiede sollen es dem
|
|||
|
Anwender besonders leicht machen, Makros f<>r den Schriftsatz zu schreiben.\
|
|||
|
|
|||
|
Beipielsweise, wenn <TeXmacs> ein Makro
|
|||
|
<inactive*|<macro|<active*|x<rsub|1>>|<active*|<with|mode|math|\<cdots\>>>|<active*|x<rsub|n>>|body>>
|
|||
|
mit den Argumenten <verbatim|y<rsub|1>> bis <verbatim|y<rsub|n>> aufruft,
|
|||
|
bleiben die Argumentvariablen <src-arg|x<rsub|1>> bis <src-arg|x<rsub|n>>
|
|||
|
an die unevaluierten Ausdr<64>cke <verbatim|y<rsub|1>> bis
|
|||
|
<verbatim|y<rsub|n>> gebunden bis der Rumpf, body, mit diesen Bindungen
|
|||
|
evaluiert worden ist. Die Evaluierung von <verbatim|y<rsub|i>> wird
|
|||
|
jedesmal durchgef<65>hrt, wenn das Argument <src-arg|x<rsub|i>> aufgerufen
|
|||
|
wird. Wenn also ein Makro <inactive*|<macro|x|<arg|x> und nochmal <arg|x>>>
|
|||
|
auf den Ausdruck <verbatim|y> angewandt wird, wird der Ausdruck
|
|||
|
<verbatim|y> genau zweimal ausgewertet.
|
|||
|
|
|||
|
In <name|Scheme> werden die R<>mpfe von <name|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<68>ltig, ob es sich um ein Argument oder eine Kontext-Variable
|
|||
|
handelt. Daher entspricht das <TeXmacs>-Makro
|
|||
|
|
|||
|
<\tm-fragment>
|
|||
|
<inactive*|<assign|foo|<macro|x|<blah|<arg|x>|<arg|x>>>>>
|
|||
|
</tm-fragment>
|
|||
|
|
|||
|
dem folgenden <name|Scheme>-Makro:
|
|||
|
|
|||
|
<\scheme-fragment>
|
|||
|
(define-macro (foo x)
|
|||
|
|
|||
|
\ \ `(let ((x (lambda () ,x)))
|
|||
|
|
|||
|
\ \ \ \ \ (blah (x) (x)))
|
|||
|
</scheme-fragment>
|
|||
|
|
|||
|
Umgekehrt geh<65>ren zu dem folgenden <name|Scheme>-Makro bzw. -Funktion
|
|||
|
|
|||
|
<\scheme-fragment>
|
|||
|
(define-macro (foo x) (blah x x))
|
|||
|
|
|||
|
(define (fun x) (blah x x))
|
|||
|
</scheme-fragment>
|
|||
|
|
|||
|
die folgenden <TeXmacs>-Analoga:
|
|||
|
|
|||
|
<\tm-fragment>
|
|||
|
<\inactive*>
|
|||
|
<assign|foo|<macro|x|<eval|<blah|<quote-arg|x>|<quote-arg|x>>>>>
|
|||
|
</inactive*>
|
|||
|
|
|||
|
<\inactive*>
|
|||
|
<assign|fun|<macro|x|<with|x*|<arg|x>|<blah|<quote-value|x*>|<quote-value|x*>>>>>
|
|||
|
</inactive*>
|
|||
|
</tm-fragment>
|
|||
|
|
|||
|
Hier wurden die Konstrukte <markup|quote-arg> und <markup|quote-value> dazu
|
|||
|
benutzt Argumente bzw. Kontext-Variable aufzurufen. Die
|
|||
|
<TeXmacs>-Konstrukte <markup|eval>, <markup|quote>, <markup|quasiquote> und
|
|||
|
<markup|unquote> verhalten sich wie ihre <name|Scheme>-Analoga. Das
|
|||
|
<markup|quasi>-Konstrukt ist eine Abk<62>rzung f<>r <markup|quasiquote> gefolgt
|
|||
|
von Evaluierung.
|
|||
|
|
|||
|
<tmdoc-copyright|1998--2004|Joris van der Hoeven>
|
|||
|
|
|||
|
<tmdoc-license|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".>
|
|||
|
</body>
|
|||
|
|
|||
|
<\initial>
|
|||
|
<\collection>
|
|||
|
<associate|language|german>
|
|||
|
</collection>
|
|||
|
</initial>
|