Print

Print


>> So I'm generally in favour of this suggestion. But I wonder if there is
>> some downside to using braces that I'm not experienced enough to see. (I
>> can't think off the top of my head of another stack-like data structures
>> in TeX that uses braces.) Can anyone comment further on this?
>
> Well, to answer my own question, here's a function I'm currently using in an
> expl3 translation of the NFSS: (sorry for the long-ish code chunk)

It is very easy to convert from the braced to the delimited version using

    \cs_set:Npn \seq_elt:n #1 {\seq_elt:w #1 \seq_elt_end:}

See code below for the full code corresponding to what you wrote.


\RequirePackage{expl3}
\ExplSyntaxOn
% Assuming seqs of the form
\tl_new:Nn \l_foo_Seq {\seq_elt:n {a/b-c} \seq_elt:n {A/BC-DE}}

% We can always convert back to the old form using
\cs_new:Npn \seq_elt_new_to_old:n #1 {\seq_elt:w #1 \seq_elt_end:}

% "\Seq_map_inline:Npn" <seq> <params> <function definition>
\cs_new_protected_nopar:Npn \Seq_map_inline:Npn #1#2# {
  \Seq_map_inline_aux:Nnn #1 {#2}
}
\cs_new:Npn \Seq_map_inline_aux:Nnn #1#2#3 {
  \cs_set_eq:NN \seq_elt:n \seq_elt_new_to_old:n
  \cs_set:Npn \seq_elt:w #2 \seq_elt_end: {#3}
  #1
  \use_none:nnn \seq_elt_end: \q_break {} % break in the "new" way.
  \cs_set_eq:NN \seq_elt:w \ERROR
  \cs_set_eq:NN \seq_elt:n \ERROR
}

% Example
\tl_set:Nn \l_foo_Seq {\seq_elt:n {a/b-c} \seq_elt:n {A/BC-DE}}
\Seq_map_inline:Npn \l_foo_Seq #1/#2-#3 {\tl_show:n {#1|#2|#3}}


-- Bruno