
Tengo dos secuencias: \l_words_seq
que contiene: { dans, [DP, la, maison, ]foc } y que
\l_glosses_seq
contiene: { in, the, house }. Me gustaría crear otra secuencia \l_final_seq
que \l_glosses_seq
inserte los elementos que \l_words_seq
coinciden con la expresión regular ^(\[(DP|NP)|\]\w* )
en las posiciones correspondientes. El resultado debería ser { en, [DP, la, casa, ]foc }
\int_new:N \l_counter_glosses_int
\seq_const_from_clist:Nn \l_words_seq {dans, [DP, la, maison, ]foc}
\seq_const_from_clist:Nn \l_glosses_seq {in, the, house}
\seq_new:N \l_final_seq
\int_zero:N \l_counter_glosses_int
\seq_map_inline:Nn \l_words_seq {
\regex_match:nnTF {^(\[(DP|NP)|\]\w* )} { #1 }
{ \seq_put_right:Nn \l_final_seq {#1} }
{
\int_incr:N \l_counter_glosses_int
\seq_put_right:No \l_final_seq { \seq_item:Nn \l_glosses_seq {\int_use:N \l_counter_glosses_int}}
}
}
\seq_map_inline:Nn \l_final_seq { #1~ }
Pero mi resultado es
house [DP house house ]foc
¿Cómo podría solucionar esto? Lo intenté \seq_put_right:No
pero solo funciona cuando agrego el número entero y no el elemento correspondiente a ese número entero.
Respuesta1
La solución es usar \seq_put_right:Ne
(o Nx
) en su lugar para expandir completamente el elemento insertado antes de agregarlo a la secuencia.
El o
tipo realiza una única expansión, lo cual no es suficiente cuando intentas obtener un elemento de una secuencia mediante un índice que a su vez está almacenado en una variable.
El uso e
de tipo (o x
tipo) expandirá el elemento, incluido el valor entero, lo que le dará los resultados esperados.
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\int_new:N \l_mymodule_glosses_int
\seq_const_from_clist:Nn \l_mymodule_words_seq {dans, [DP, la, maison, ]foc}
\seq_const_from_clist:Nn \l_mymodule_glosses_seq {in, the, house}
\seq_new:N \l_mymodule_final_seq
\int_zero:N \l_mymodule_glosses_int
\seq_map_inline:Nn \l_mymodule_words_seq {
\regex_match:nnTF {^(\[(DP|NP)|\]\w*)} { #1 }
{ \seq_put_right:Nn \l_mymodule_final_seq {#1} }
{
\int_incr:N \l_mymodule_glosses_int
\seq_put_right:Ne \l_mymodule_final_seq { \seq_item:Nn \l_mymodule_glosses_seq {\l_mymodule_glosses_int}}
}
}
\seq_use:Nn \l_mymodule_final_seq { ~ }
\ExplSyntaxOff
\end{document}
Reemplacé la última parte en \seq_use:Nn
lugar de usar mapeo en línea.
Alternativamente, puede utilizar \seq_pop:NN
para extraer el valor de la secuencia a una lista de tokens. Luego, o
la expansión de tipo (o V
, que se prefiere a o
) funcionará bien para expandir la variable de la lista de tokens.
\seq_pop:NN \l_mymodule_glosses_seq \l_tmpa_tl
\seq_put_right:NV \l_mymodule_final_seq \l_tmpa_tl