我可以看到至少 3 种不同的方法来实现整数堆栈
- 使用序列 (seq)
- 使用逗号分隔列表 (clist)
- 带有整数数组(intarray)
第 1 点和第 2 点非常相似
当然这取决于用途,以下是一些我自己的目的的事实:
- 堆栈的最大大小事先并不知道,但大约为 10 到 20
- 堆栈操作的调用频率与分段命令一样高
如何在这些设计之间做出决定?
以下是使用 clist 的 POC:
\documentclass{minimal}
\begin{document}
\ExplSyntaxOn
\int_new:N \l_my_int
\clist_new:N \l_my_stack
\int_set:Nn \l_my_int { 421 }
\clist_push:Nx \l_my_stack { \int_use:N \l_my_int } % push 421
\clist_log:N \l_my_stack
\int_set:Nn \l_my_int { 123 }
\clist_push:Nx \l_my_stack { \int_use:N \l_my_int } % push 123
\clist_log:N \l_my_stack
\int_set:Nn \l_my_int { 0 } % reset
\clist_pop:NN \l_my_stack \l_tempa_tl
\int_set:Nn \l_my_int { \l_tempa_tl }
\int_log:N \l_my_int % retrieve 123
\clist_pop:NN \l_my_stack \l_tempa_tl
\int_set:Nn \l_my_int { \l_tempa_tl }
\int_log:N \l_my_int % retrieve 421
\end{document}
日志文件内容如下
The comma list \l_my_stack contains the items (without outer braces):
> {421}.
The comma list \l_my_stack contains the items (without outer braces):
> {123}
> {421}.
> \l_my_int=123.
> \l_my_int=421.
可以clist
用替换seq
,得到相同的结果。