On Mon, 31 Dec 2007 16:44:35 +0100, Andreas Matthias wrote: Hi Andreas, > I struggled a while to understand how to use \prg_whiledo:nT. > I think I figured it out, but it seems to be rather clumsy: > > > \RequirePackage{l3prg} > \ExplSyntaxOn > > \tlp_new:N \a_tlp > \int_new:N \a_int > \int_zero:N \a_int > > \prg_whiledo:nT { > \tlp_set:Nx \a_tlp { > \predicate_p:n { > \int_compare_p:nNn \a_int < 4 && > \c_true % some complex tests here > } > } > \exp_after:NN \tlp_if_eq:NNT \a_tlp This last line should just be \bool_if:NT \a_tlp and I can see we left out \bool_set:Nn functions which evaluate such predicate expressions. It would make sense for such a function to work that way, wouldn't it? The entire test could be simplified to \prg_whiledo:nT { \predicate:nT{ \int_compare_p:nNn \a_int < 4 && \c_true % some complex tests here } }{ \io_put_term:x{Loop~ \int_use:N \a_int} \int_incr:N \a_int } > In xtheorem.sty it is used as: > > \prg_whiledo:nT{ > \int_compare:nNnT \etex_lastnodetype:D = \c_eleven > }{\tex_unskip:D} > > And actually, this was the way it expected it to work? But > it doesn't work, does it? I didn't run xtheorem.sty, though. The idea behind these generic constructs is to have input as \prg_whiledo:nT {% or F <various stuff> \some_test_function:..T % or :..F } { <true code> } So the construction in xtheorem.sty ought to work. (It should be replaced by a simpler \int_whiledo:nNnT but that is not important.) -- Morten