Re: vector-unzip Taylor Campbell 18 Apr 2003 03:37 UTC

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

And actually, the statement:

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

is false.  If you notice in the reference implementation, plain
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
negative, so VECTOR-UNZIP1 would always return zero values.  That isn't
what you'd want.

> Regards
> Michael Burschik