latex3 中的不可变函数?

latex3 中的不可变函数?

假设我们有一个名为 的非空序列\l_tmpa_seq。我们想为该名称分配一个\l_tmpb_seq值,该值是调用类似以下函数的结果

\int_eval:n {#1 + 1}

在序列的每个成员上。

因此采取

\seq_set_eq:Nx \l_tmpb_seq  { \l_process_cs:N \l_tmpa_seq }

在哪里

\cs_new_protected:Npn \l_process_cs:N #1 
{
    % Assign #1 to \l_name_seq
    % Process the sequence \l_name_seq
    % ...
    % Leave / return the sequence \l_name_seq
}

和(为简洁起见,可能是一个自定义函数)

\cs_generate_variant:Nn \seq_set_eq:NN { Nx }

现在我求助于

  1. 改变传递给该函数的第二个参数或
  2. \seq_use:Nn \l_name_seq {some_delimiter}在命令式语言中作为语句调用return来序列化结果并\seq_set_split:Nnn \l_another_seq {#1} {some_delimiter}作为赋值语句调用。

我想完全避免第一种方法,而第二种方法虽然麻烦,但承认句法结构喜欢

\cs_return:N \l_name_seq

可以以单子方式完成,并且

\seq_let:Nx \l_another_seq {\l_someFunction:N #1}

我将实现它来看看它是如何工作的。

当将函数结果分配给范围之外的变量时,如何返回、序列化和评估函数结果?

相关内容