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

Re: vector compare

This page is part of the web mail archives of SRFI 67 from before July 7th, 2015. The new archives for SRFI 67 contain all messages, not just those from before July 7th, 2015.

On Thu, 9 Jun 2005, Jens Axel Søgaard wrote:

Per Bothner wrote:
Sebastian Egner wrote:

 > The default compare for vectors is unusual, and more critically it is
 > incompatible with the default compare for lists and strings.
 > The latter are both lexicographic compare.

Correct. In this SRFI, vectors are compared first by length and then
lexicographically by default.

Do you have any examples or use cases or algorithms that are simpler
when using this "natural order"?  What prior art is there for
using this order?

As Sebastian argues, there not 1 natural order of vectors, but the
ordering in the srfi is /a/ natural order. A concrete
example is the sorting of polynomials:

    x^3 > x^2 + 1 > x^2 > 42

A concrete representation in terms of vectors yields:

 #(3 0 0 0) > #(2 0 1) > #(2 0 0) > #(42)

It is clear that there are some uses of vectors for which the SRFI's default-compare is more useful. But there are also uses of vectors (e.g., as a sequence representation) for which using the same default-compare as for lists is more useful (For example, I occasionally find myself flipping a string into a vector-of-characters representation. If I were to sometime sort them in that representation, I doubt I'd remember why they weren't matching up with the string-sorted ones! I don't sort vectors often enough to remember that they compare strangely.)

In sum, I expect the extra cognitive load of explaining why and remembering that:

   (vector-compare x y)

is so much different than:

   (list-compare (vector->list x) (vector->list y))

is just not worth it.

Hence, I, too, would prefer using lexicographic comparison for all sequence types. It's easier to explain and to remember.

-- Donovan Kolbly                    (  d.kolbly@xxxxxxxxxxx
				     (  http://www.rscheme.org/~donovan/