Hi Bruno,
Great work!
On 14/03/2011, at 6:44 AM, Bruno Le Floch wrote:
> The only reason to not brace items is to be able to find an item
> faster using delimited arguments, and that this will only work for
> "nice" items (i.e., no brace, no `#`).
I was aware that the \seq_if_in functions had this restriction, but I didn't realise the internal structure of the seq was chosen for this reason; IMO braces turn up far too easily in input text to restrict them from such a data structure. (Imagine pushing a list of names to a stack, say, and someone is called "Hef{}feron"!)
> So I have the following more
> radical proposal: brace the arguments, and propose two searches,
We like radical proposals :)
> - one true search, which goes through each element and compares with
> `\tl_if_eq:nn`,
>
> - a `str`-like one, which detokenizes the seq, and searches for the
> detokenized version of `\seq_elt:n {<item>}` with a delimited argument
> (now ok, since everything is detokenized).
>
> That proposal would make the code much, much clearer in my opinion.
> Also slightly faster, but not more than two-fold.
I did a quick comparison, and it seems like the delimited-argument search is around about 10-20 times faster than mapping, even for relatively large seqs (several thousand (small) elements, which takes a surprisingly long time to create using \seq_push:Nn).
So I'm generally in favour of this suggestion. But I wonder if there is some downside to using braces that I'm not experienced enough to see. (I can't think off the top of my head of another stack-like data structures in TeX that uses braces.) Can anyone comment further on this?
-- Will
|