Print

Print


>> Another question I noticed is whether mappings should be made nestable
>> or not. I _think_ that \seq_map_function:NN is nestable, and that
>> \seq_map_inline:Nn and \seq_map_variable:NNn are not. All three can be
>> made expandable, I believe. Should they?
>
> Indeed they should.
> I ran into this problem just the other day and left a note to come back to
> this issue :)

I'll do that tomorrow (there is a typo above, I mean "All three can be
made _nestable_").


> I've actually wondered if \seq_show:N is really needed at all, but we've
> never come up with a good enough argument to drop it completely in favour of
> \seq_display:N.
>
> I've updated a small handful of test cases to use \seq_display:N instead,
> but there are many more examples that use \meaning (etc.) that probably need
> adjusting.

In fact, quite a few tests are \prop_display:N with a prop whose items
are seq, so we can't use \seq_display:N for that. These will remain to
be changed when/if we switch.

> It's just a few in xor, right?

I think, yes.

> Looking in say \xor_save_area_info:n,

I'm a bit confused by what it does: does the content of, e.g.,
\g_xor_area_DDD_float_seq have to be fully expanded? Otherwise

    \cs_set_nopar:Npx \@tempa {
       \exp_not:N \int_gset:cn
          {g_xor_area_ #1 _float_int}
          {\int_use:c {g_xor_area_ #1 _float_int} }
       \gdef \expandafter\noexpand \csname g_xor_area_#1_float_seq \endcsname
          {\csname g_xor_area_#1_float_seq\endcsname}
    }

can be replaced by

    \cs_set_nopar:Npx \@tempa {
       \exp_not:N \int_gset:cn
          {g_xor_area_ #1 _float_int}
          {\int_use:c {g_xor_area_ #1 _float_int} }
       \gdef \exp_not:c {g_xor_area_#1_float_seq}
          { \exp_not:v {g_xor_area_#1_float_seq} }
    }

which just unpacks \g_xor_area_#1_float_seq. That would be simpler.


> perhaps all it needs is for \seq_elt:w
> and \seq_elt_end: to be \protected, and then their reassignment to \relax
> could be avoided. Haven't tried, though.

Right. The default (i.e. the value when not inside a mapping) could be

    \cs_set_protected:Npn \seq_elt:w #1 \seq_elt_end: {\ERROR}
    \cs_set_eq:NN \seq_elt_end: \tex_relax:D

and in the new scheme,

    \cs_set_protected:Npn \seq_elt:n #1 {\ERROR}

But I don't like relying on a default value to be in effect for those
\seq_elt... because there is too much risk that something goes wrong
(e.g. the value is not restored after a mapping and you end up mapping
instead of doing nothing). Also I would prefer the mapping to gobble
its argument and raise an \ERROR, so that the error recovery is
better:

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

Regards,
-- Bruno