On Thu, 11 Dec 2008, Aditya Mahajan wrote:

On Thu, 11 Dec 2008, Bart C. Wise wrote:

When I run the code below (via minimals), I get the following error, why?

\newcount\startcnt
\newcount\tempcnta

\def\myloop#1{%
 \message{enter}
 \tempcnta=\the\startcnt%
 \loop
   \message{loop}
   \advance \tempcnta by 1
   \ifnum\tempcnta>#1\else \repeat\fi
 \message{exit}
}

\starttext
\startcnt=1800
\myloop{2008}
\stoptext

Do you know of \dostepwiserecurse{from}{to}{step}{body}. For example,

\starttext
\dostepwiserecurse{1800}{2008}{1}{We are at \recurselevel \endgraf}
\stoptext

There is also doloop. Documentations from syst-ext.tex

%D \macros
%D   {doloop,exitloop}
%D
%D Sometimes loops are not determined by counters, but by
%D (a combinations of) conditions. We therefore implement a
%D straightforward loop, which can only be left when we
%D explictly exit it. Nesting is supported. First we present
%D a more extensive alternative.
%D
%D \starttyping
%D \doloop
%D   {Some kind of typesetting punishment \par
%D    \ifnum\pageno>100 \exitloop \fi}
%D \stoptyping
%D
%D When needed, one can call for \type{\looplevel} and
%D \type{\loopdepth}.

[...]

%D We don't have to declare new counters for \type{\looplevel}
%D and \type{\loopdepth} because we can use \type{\recurselevel}
%D and \type{\recursedepth}.

(although I could not get recurselevel or looplevel to work)

[...]

%D The loop is executed at least once, so beware of situations
%D like:
%D
%D \starttyping
%D \doloop {\exitloop some commands}
%D \stoptyping
%D
%D It's just a matter of putting the text into the \type{\if}
%D statement that should be there anyway, like in:
%D
%D \starttyping
%D \doloop {\ifwhatever \exitloop \else some commands\fi}
%D \stoptyping
%D
%D You can also quit a loop immediately, by using \type
%D {\exitloopnow} instead. Beware, this is more sensitive
%D for conditional errors.

So, you can write your example as (changed the stopping condition to add \else, just to illustrate that it works)

\newcount\startcnt
\newcount\tempcnta

\def\myloop#1{%
  \message{enter}
  \tempcnta=\the\startcnt%
  \doloop{
    \message{loop \the\tempcnta}
    \advance \tempcnta by 1
    \ifnum\tempcnta<#1 \else \exitloop \fi}
  \message{exit} }

\starttext
\startcnt=1800
\myloop{2009}
\stoptext

Aditya
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the 
Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : https://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________

Reply via email to