Steuerung des logischen Ablaufs

<if|condition|if-body>

<if|condition|if-body|else-body>
(Bedingung)

Dieses Konstrukt setzt if-body nur dann, wenn die Bedingung condition erfüllt ist. Wenn ein optionales else-body spezifiziert wurde, dann wird diese nur gesetzt, wenn die Bedingung condition falsch ist.

Bemerkung 1. Man sollte beachten, das Verwendung von Bedingungen fehleranfällig ist. Das kommt davon, dass die Erreichbarkeit von Argumenten nicht vorab getestet werden kann. In dem Makro

<macro|x|<if|<visibility-flag>|x>>

ist das Makro-Argument x dann und nur dann erreichbar, wenn <visibility-flag> wahr ist. Das kann aber vorher nicht getestet werden. Bestimmte Editier-Operationen, wie Suchen oder Rechtschreibprüfung kann eine falsche Bestimmung der Erreichbarkeit dazu führen, dass der Cursor in nicht erreichbare Positionen gesetzt wird oder dass bestimmte Konstrukte ignoriert werden. Wir wollen dieses Verhalten des Editors verbessern. Bis dahin ist es besser, Bedingungen zu vermeiden.

Bemerkung 2. Die Bedingungs-Konstrukte sind nur für Zeileninhalt voll implementiert. Wenn man Bedingungen im Blockkontext braucht, dann muss man den Wenn-ja-Fall und den Wenn-nein-Fall getrennt in Makros definieren und mit einem unbenannten Makro die Bedingung einführen. Z.B.:

<assign|kalt|<macro|x|<with|color|blue|x>>>

<assign|heiss|<macro|x|<with|color|red|x>>>

<assign|adaptive|<macro|x|<compound|<if|<summer>|heiss|kalt>|x>>>

<case|cond-1|body-1||cond-n|body-n>

<case|cond-1|body-1||cond-n|body-n|else-body>
(Fallunterscheidungen)

Diese Befehle sind äquivalent zu

<if|cond-1|body-1|<if|cond-n|body-n>>

<if|cond-1|body-1|<if|cond-n|body-n|else-body>>

<while|condition|body>
(wiederholte Ausführung)

Solange die Bedingung condition erfüllt ist, wird body ausgeführt. Beispielsweise erzeugt der folgende das Makro

< assign | count | < macro | from | to | < with | i | from |

<\concat|

<while|<less|i|to>|i, <assign|i|<plus|i|1>>>

|

to

>

> > >

aus <count|1|50> dies:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50

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".