Ilya Zakharevich on Tue, 16 Jan 2024 05:22:12 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Bizarre semantic of vecsearch/setsearch


First, setsearch()/vecsearch() are just three flavors of the same function
(since setsearch() has 2 flavors ;―]). — But the documentation of neither
of them mentions the other one.

Second, these 3 flavors seem to be kind of inconvenient: in the
contexts I have in mind¹⁾, what seems more reasonable are

  • Return the largest index with the value < argument.
  • Return the largest index with the value ≤ argument.
  • As above, but mark the case when the value = argument.

(E.g., in the last case, one can return negative index on
equality. — Works since this index is never 0.)

  ¹⁾ Find the intersection of the list with an interval [b,c].  (And,
     since these b and c are variable, I need to know “where exactly
     is the intersection” if empty.)

⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜⁜

It seems that these extra semantics have 0 runtime cost.

It would be nice if these semantics were implemented.  However, since
the current 3 implemented semantics are split between two function
names, I would be very puzzled on WHERE to put these flavors…  

For the last flavor above, it would seem natural to trigger this by a
negative flag — but due to the docs beings too permissive, this is not
backwards compatible.  (Do not know whether such “improbable”
incompatibilities are considered permissible…)

Thanks,
Ilya