s is a hot function, so there are performance impacts. (assert-vlist vlist) (block-cons item vlist #f)) (define (vlist-head vlist) "Return the head of VLIST." (assert-vlist vlist) (let ((base (vlist-base vlist)) (offset (vlist-offset vlist))) (block-ref (block-content base) offset))) (define (vlist-tail vlist) "Return the tail of VLIST." (assert-vlist vlist) (let ((base (vlist-base vlist)) (offset (vlist-offset vlist))) (if (> offset 0) (make-vlist base (- offset 1)) (make-vlist (block-base base) (block-offset base))))) (define (vlist-null? vlist) "Return true if VLIST is empty." (assert-vlist vlist) (let ((base (vlist-base vlist))) (and (not (block-base base)) (= 0 (block-size base)))))