理解“谓词必须可扩展”错误

理解“谓词必须可扩展”错误

我不明白这段代码的注释版本。\regex_match:nnTF是不可扩展的,那么为什么要将由它派生的谓词定义为可扩展的?

\documentclass{article}
\ExplSyntaxOn

\regex_const:Nn\__erw_this_regex{(?:foo)}
\prg_new_conditional:Npnn
%^^A\prg_new_protected_conditional:Npnn
\__erw_regex_match:n #1 {p}
%^^A\__erw_regex_match_protected:n #1 {p}
{\regex_match_p:Nn\__erw_this_regex{#1}}

% LaTeX3 Error: Predicate '\__erw_regex_match_protected_p:n' must be
%
%--- TeX said ---
%(LaTeX3)        expandable.

\ExplSyntaxOff
\begin{document}

\end{document}

文档

答案1

expl3 的谓词是可以扩展为\c_true_bool或 的宏\c_false_bool。因此这些谓词必须始终可扩展,否则它们就不能用作谓词。

因此\prg_new_protected_conditional:Npnn \... {p}始终是一个错误,因为它会定义一个不可能存在的不可扩展谓词。

由于同样的原因\regex_match_p:Nn,它没有被定义:它不可扩展,所以它不能成为谓词。

相关内容