diff options
author | Norbert Preining <norbert@preining.info> | 2023-05-06 03:01:13 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-05-06 03:01:13 +0000 |
commit | 507fa9c669d7e4bc2c808f269113c6ced0b18827 (patch) | |
tree | 92d0ad38dc9549526803851fa62b4399f03006ac /macros/latex/contrib/l3kernel/l3seq.dtx | |
parent | 3cf2e76fc502cb474081c80838c95ecaba2f386d (diff) |
CTAN sync 202305060301
Diffstat (limited to 'macros/latex/contrib/l3kernel/l3seq.dtx')
-rw-r--r-- | macros/latex/contrib/l3kernel/l3seq.dtx | 70 |
1 files changed, 31 insertions, 39 deletions
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx index 24d115669c..e4aeffa83f 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/contrib/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-20} +% \date{Released 2023-05-05} % % \maketitle % @@ -1608,50 +1608,42 @@ % somewhat moot. The integer variables are declared in \pkg{l3int}: % load-order issues. % \begin{macrocode} -\cs_if_exist:NTF \tex_uniformdeviate:D +\seq_new:N \g_@@_internal_seq +\cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN } +\cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN } +\cs_new_protected:Npn \@@_shuffle:NN #1#2 { - \seq_new:N \g_@@_internal_seq - \cs_new_protected:Npn \seq_shuffle:N { \@@_shuffle:NN \seq_set_eq:NN } - \cs_new_protected:Npn \seq_gshuffle:N { \@@_shuffle:NN \seq_gset_eq:NN } - \cs_new_protected:Npn \@@_shuffle:NN #1#2 + \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int { - \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int - { - \msg_error:nnx { seq } { shuffle-too-large } - { \token_to_str:N #2 } - } - { - \group_begin: - \int_zero:N \l_@@_internal_a_int - \@@_push_item_def: - \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n - #2 - \@@_pop_item_def: - \seq_gset_from_inline_x:Nnn \g_@@_internal_seq - { \int_step_function:nN { \l_@@_internal_a_int } } - { \tex_the:D \tex_toks:D ##1 } - \group_end: - #1 #2 \g_@@_internal_seq - \seq_gclear:N \g_@@_internal_seq - } + \msg_error:nnx { seq } { shuffle-too-large } + { \token_to_str:N #2 } } - \cs_new_protected:Npn \@@_shuffle_item:n { - \int_incr:N \l_@@_internal_a_int - \int_set:Nn \l_@@_internal_b_int - { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int } - \tex_toks:D \l_@@_internal_a_int - = \tex_toks:D \l_@@_internal_b_int - \tex_toks:D \l_@@_internal_b_int - } + \group_begin: + \int_zero:N \l_@@_internal_a_int + \@@_push_item_def: + \cs_gset_eq:NN \@@_item:n \@@_shuffle_item:n + #2 + \@@_pop_item_def: + \seq_gclear:N \g_@@_internal_seq + \int_step_inline:nn \l_@@_internal_a_int + { + \seq_gput_right:Nx \g_@@_internal_seq + { \tex_the:D \tex_toks:D ##1 } + } + \group_end: + #1 #2 \g_@@_internal_seq + \seq_gclear:N \g_@@_internal_seq + } } +\cs_new_protected:Npn \@@_shuffle_item:n { - \cs_new_protected:Npn \seq_shuffle:N #1 - { - \msg_error:nnn { kernel } { fp-no-random } - { \seq_shuffle:N #1 } - } - \cs_new_eq:NN \seq_gshuffle:N \seq_shuffle:N + \int_incr:N \l_@@_internal_a_int + \int_set:Nn \l_@@_internal_b_int + { 1 + \tex_uniformdeviate:D \l_@@_internal_a_int } + \tex_toks:D \l_@@_internal_a_int + = \tex_toks:D \l_@@_internal_b_int + \tex_toks:D \l_@@_internal_b_int } \cs_generate_variant:Nn \seq_shuffle:N { c } \cs_generate_variant:Nn \seq_gshuffle:N { c } |