Karim Belabas on Wed, 04 Jan 2017 20:24:40 +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).

Opinions ?

Best wishes for the new year,

    K.B.
--
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/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`