Если вы используете PLT, у вас есть несколько простых способов получить это:
(define (subvector v start end)
(list->vector (for/list ([i (in-vector v start end)]) i)))
(define (subvector v start end)
(build-vector (- end start) (lambda (i) (vector-ref v (+ i start)))))
(define (subvector v start end)
(define new (make-vector (- end start)))
(vector-copy! new 0 v start end)
new)
Последний, вероятно, будет самым быстрым. Причина, по которой нет такой встроенной операции, заключается в том, что люди обычно этого не делают. Когда вы имеете дело с векторами в Scheme, вы обычно делаете это, потому что вы хотите что-то оптимизировать, поэтому более распространенным является возврат вектора и диапазона вместо выделения нового.
(И если вы считаете, что это полезно, пожалуйста, предложите это в списке рассылки PLT.)