如何插入 \int_case 值并由函数返回?

如何插入 \int_case 值并由函数返回?

我想检查变量序列的总和。我创建了一个返回此总和的函数。但是当我使用它时,我得到了一个错误。

\documentclass{article}
\usepackage{expl3}
\pagestyle{empty}
\ExplSyntaxOn
\int_set:Nn \l_tmpa_int{1}
\int_set:Nn \l_tmpa_int{2}
\seq_const_from_clist:Nn \g__variables_seq{\l_tmpa_int,\l_tmpb_int}
\cs_new_protected:Nn \g__sum:{
\int_zero_new:N \l__sum_seq_int
\seq_map_inline:Nn \g__variables_seq {
\int_set:Nn \l__sum_seq_int{\int_eval:n{\l__sum_seq_int+##1}}
}
\int_use:N \l__sum_seq_int
}
\int_case:nnF{\g__sum:}{{1}{\message{one}}}{\message{many}}
\ExplSyntaxOff
\begin{document}

\end{document}

答案1

我猜你有一些用整数填充的序列,无论是显式的还是隐式的(即存储在整数变量中),并且你想返回总和。

\documentclass{article}

%\usepackage{expl3} % not needed with recent LaTeX kernel

\ExplSyntaxOn

\cs_new:Nn \ak_foo_sequence_sum:N
 {% the argument is a sequence variable
  \int_eval:n { \seq_use:Nn #1 { + } }
 }

\begin{document}

% test

\int_set:Nn \l_tmpa_int { 2 }
\int_set:Nn \l_tmpb_int { -4 }

\seq_set_from_clist:Nn \l_tmpa_seq { \l_tmpa_int, 23, \l_tmpb_int , 21 }

%%% just print the sum
\ak_foo_sequence_sum:N \l_tmpa_seq

\par

%%% now use the function to set an integer variable
\int_set:Nn \l_tmpa_int { \ak_foo_sequence_sum:N \l_tmpa_seq }
%%% print the result
\int_to_arabic:n { \l_tmpa_int }

\end{document}

在两种情况下你都会得到 42。

该函数\seq_use:Nn一次性(在完全扩展上下文中)传递第一个参数指定的序列中的项,这些项均由第二个参数中指定的标记分隔。在整数表达式中,+-这是合法的。

\ak_foo_sequence_sum:N <sequence>因此,您可以在任何需要整数表达式的地方使用,包括 的第一个参数\int_case:nnF

相关内容