Eine alternative Lösung:
\long\def\firstoftwo#1#2{#1}
\long\def\secondoftwo#1#2{#2}
% \ifnumber{<Zahlenbeziehung>}{<wahr>}{<falsch>}:
\def\ifnumber#1{%
\ifnum#1\relax
\expandafter\firstoftwo
\else
\expandafter\secondoftwo
\fi
}
% eine Schleife für \if-Abfragen mit der Syntax wie das oben definierte \ifnumber,
% also mit {wahr}{falsch} Argumenten, die in der Schleife weggelassen werden:
% \dowhile{<Bedingung>}{<Ausführung wenn Bedingung wahr>}
\long\def\dowhile#1#2{%
#1{#2\dowhile{#1}{#2}}{}%
}
% test, ob's funktioniert:
\newcount\step
\dowhile{\ifnumber{\the\step<3}}{\advance\step by 1 \the\step}
% damit \while mit derselben Syntax definieren wie in ctansearchs Antwort:
% \while[<Start>,<Obergrenze>,<Ausführung solange Zeiger kleiner Obergrenze>]
\long\def\while[#1,#2,#3]{%
% mit der Gruppe wird die Schleife schachtelbar
\begingroup
\step=#1
\dowhile
{\ifnumber{\the\step<#2}}
{#3\advance\step by 1 }%
\endgroup
}
\while[0,3,4]
\while[1,5,Schritt \the\step\par]
\while[0,5,{a(\while[0,,b]}) \while[0,5,{a(\while[0,3,b]}) ]
\bye
![Ergebnis][1]
----------
Im LaTeX-Kernel kann man eine weitere Lösung finden:
\catcode`\@=11
\long\def\@gobble#1{}
% Definition von \@whilenum aus dem LaTeX-Kernel:
\long\def\@whilenum#1\do #2{%
\ifnum #1\relax
#2\relax\@iwhilenum{#1\relax #2\relax}%
\fi}
\long\def\@iwhilenum#1{%
\ifnum #1%
\expandafter\@iwhilenum
\else
\expandafter\@gobble
\fi{#1}}
\newcount\step
% Test, ob's funktioniert:
\@whilenum\the\step<3\do{\the\step \advance\step by 1 }
% \while mit derselben Syntax definieren wie in ctansearchs Antwort:
% \while[<Start>,<Obergrenze>,<Ausführung solange Zeiger kleiner Obergrenze>]
\long\def\while[#1,#2,#3]{%
\step=#1
\@whilenum\the\step<#2\do{#3\advance\step by 1 }%
}
\catcode`\@=12
\while[0,3,4]
\while[1,5,Schritt \the\step\par]
\bye
[1]: /upfiles/while-beispiel.png