История изменений
Исправление monk, (текущая версия) :
Если это иммутабельные персистентные структуры данных, которые не нужно полностью копировать при каждом «изменении»
Тут одно из двух: или не нужно полностью копировать или быстрый доступ по индексу. Можешь попробовать отсортировать такой массив через алгоритм с попарной заменой элементов, а потом сравнить скорость чтения из того, что получилось.
На самом деле, хороший компилятор преобразует
(define (f ...)
(define v (vector ...))
...
(g (vector-insert v i e) ...))
(то есть, если есть гарантия, что после передачи в vector-insert оригинальный массив уже не нужен) в версию, в которой vector-split-at в качестве start вернёт оригинальный массив с ограничением длины, а vector-append попытается сделать расширение массива на месте.
Исходная версия monk, :
Если это иммутабельные персистентные структуры данных, которые не нужно полностью копировать при каждом «изменении»
Тут одно из двух: или не нужно полностью копировать или быстрый доступ по индексу. Можешь попробовать отсортировать такой массив через алгоритм с попарной заменой элементов, а потом сравнить скорость чтения из того, что получилось.
На самом деле, хороший компилятор преобразует
(define (f ...)
(define v (vector ...))
...
(f (vector-insert v i e) ...))
(то есть, если есть гарантия, что после передачи в vector-insert оригинальный массив уже не нужен) в версию, в которой vector-split-at в качестве start вернёт оригинальный массив с ограничением длины, а vector-append попытается сделать расширение массива на месте.