
У меня есть две последовательности: \l_words_seq
содержащая: { dans, [DP, la, maison, ]foc } и
\l_glosses_seq
содержащая: { in, the, house }. Я хотел бы создать еще одну последовательность, \l_final_seq
которая \l_glosses_seq
вставляет элементы из \l_words_seq
сопоставления с регулярным выражением ^(\[(DP|NP)|\]\w* )
в соответствующие позиции. Результат должен быть { in, [DP, the, house, ]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~ }
Но мой результат
house [DP house house ]foc
Как это исправить? Я пробовал \seq_put_right:No
, но это работает только тогда, когда я добавляю целое число, а не элемент, соответствующий этому целому числу.
решение1
Решение состоит в том, чтобы использовать \seq_put_right:Ne
(или Nx
) вместо этого, чтобы полностью развернуть вставленный элемент перед добавлением его в последовательность.
Тип o
выполняет одно расширение, чего недостаточно, когда вы пытаетесь получить элемент из последовательности по индексу, который сам хранится в переменной.
Использование e
type (или x
type) расширит элемент, включая целочисленное значение, что даст вам ожидаемые результаты.
\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}
Я заменил последнюю часть, \seq_use:Nn
вместо использования встроенного отображения.
В качестве альтернативы можно использовать \seq_pop:NN
для выталкивания значения из последовательности в список токенов. Затем o
расширение типа (или V
, что предпочтительнее o
) будет работать нормально для расширения переменной списка токенов.
\seq_pop:NN \l_mymodule_glosses_seq \l_tmpa_tl
\seq_put_right:NV \l_mymodule_final_seq \l_tmpa_tl