Если вы используете 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.)
Это в 100 раз лучше, чем мое решение. –
Похож на PLT. Как насчет портативной версии схемы? –
Rainer, если вам это нравится, не стесняйтесь делать это самостоятельно. просто проигнорируйте пламя mpts и выполнить настоящую работу. –