Si vous utilisez PLT, vous avez quelques moyens faciles pour obtenir ceci:
(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)
Le dernier va probablement être le plus rapide. La raison pour laquelle une telle opération n'est pas intégrée est que les gens ne le font pas habituellement. Lorsque vous traitez des vecteurs dans Scheme, vous le faites généralement parce que vous voulez optimiser quelque chose, donc le retour d'un vecteur et une plage au lieu d'en allouer un nouveau sont plus courants.
(Et si vous pensez que cela est utile, s'il vous plaît suggérer sur la liste de diffusion du PLT.)
Ceci est 100 fois mieux que ma solution –
Apparemment comme une version PLT spécifique, et une version Scheme portable? –
Rainer, si cela vous intéresse, n'hésitez pas à le faire vous-même. Je vais juste ignorer la flamme atte Mpts et obtenir un vrai travail à la place. –