On 23/01/2011 15:28, Joseph Wright wrote:
> \cs_new_nopar:Npn \clist_element:Nn #1#2 {
> \exp_args:No \clist_element:nn {#1} {#2}
> }
> \cs_new:Npn \clist_element:nn #1#2 {
> \int_compare:nNnF {#2} < { 0 }
> {
> \clist_element_aux:nw {#2} #1
> , \q_recursion_tail \q_recursion_stop
> }
> }
> \cs_new:Npn \clist_element_aux:nw #1#2 , #3 {
> \int_compare:nNnTF {#1} = { 0 }
> { \use_i_delimit_by_q_recursion_stop:nw {#2} }
> {
> \quark_if_recursion_tail_stop:n {#3}
> \clist_element_aux:nw { #1 - 1 } #3
> }
> }
A couple of notes. I've gone for \int_compare:nNn for performance
reasons over \int_compare:n, and I'd probably use the expansion of
\int_eval:n in the 'count' functions, so that it only requires two
expansions to get to the result rather than three.
--
Joseph Wright