|Charles Greathouse on Wed, 04 Jan 2017 23:12:02 +0100|
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
|Re: Search a VECSMALL?|
* Charles Greathouse [2016-11-27 23:03]:
> setsearch and vecsearch don't work on vecsmall. Is there some other command
> that works on them? (If not, I have a feature request.)
I somehow missed that post, sorry.
I just reviewed that code and made the necessary minimal changes for
vecsort and vecsearch to officially work on t_VECSMALLs in 'master'
- vecsort: already there, just changed the documentation :-)
- vecsearch: already there, just prevented from working by 3 different
typos in 2 lines; now working and documented as well.
In both cases, a "comparison function" argument (cmpf) is not allowed:
? v = vecsort(Vecsmall([5,2,3,-1]))
%1 = Vecsmall([-1, 2, 3, 5])
? vecsearch(v, 4)
%2 = 0
? vecsearch(v, 5)
%3 = 4
? vecsort(Vec(v), (a,b)->sign(b-a))
%4 = [5, 3, 2, -1]
? vecsort(v, (a,b)->sign(b-a))
*** at top-level: vecsort(v,(a,b)->sig
*** vecsort: incorrect type in sort_function (t_VECSMALL).
I'm not sure I want to support t_VECSMALLs in "set" functions; so far only
t_VEC is support, except in setsearch which also allows t_LIST. OTOH,
it's trivial to add on top of the existing sorting function and that
would speed up sets of small integers by a factor 3 in GP (and slash
memory use by the same factor).
Best wishes for the new year,
Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation http://www.math.u-bordeaux.fr/
~kbelabas/Talence (France) http://pari.math.u-bordeaux.