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

Re: vector-unzip

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




On Thursday, April 10, 2003, at 04:40 AM, Michael Burschik wrote:

In addition to vector-unzip, SRFI-43 defines several "common unzippers", but fails to specify how their names relate to vector-unzip's argument n. As far
as I can tell from the reference implementation, the following holds:
(vector-unzipn vec) == (vector-unzip vec (- n 1)). If this is true, however,
then the reference implementation incorrectly defines vector-unzip5 as
(vector-unzip vec 5).

I've added specification for how the N in VECTOR-UNZIPn relates to how it
unzips.

And actually, the statement:

(vector-unzipN vec) == (vector-unzip vec (- N 1))

is false. If you notice in the reference implementation, plain VECTOR-UNZIP already subtracts one from N to get the highest index to get a value from --

(define (vector-unzip vec i)
  (let loop ((vecs '()) (i (- i 1)))
                     ;; ^^^^^^^^^^^
    (if (negative? i)
        (apply values vecs)
        (loop (cons (vector-map (cut vector-ref <> i) vec)) vecs)
              (- i 1)))))

Therefore, VECTOR-UNZIP1 would start getting stuff at index -1, but that's negative, so VECTOR-UNZIP1 would always return zero values. That isn't exactly
what you'd want.

Regards

Michael Burschik