Это выражение, которое сигнализирует об ошибке:
(< (vector-ref vec left) (vector-ref vec right))
Функция <ожидает действительное число в качестве первого аргумента, но получила список.Поскольку ваш вектор vec содержит списки, выражение (vector-ref vec left) возвращает список (а не число).Поскольку вы хотите сортировать по длине списков, вам нужно написать: </p>
(< (length (vector-ref vec left)) (length (vector-ref vec right)))
, чтобы сравнить длину списков вместо самих списков.
Примечание.Реализация схемы, скорее всего, имеет функцию векторной сортировки в своей библиотеке.В R6RS процедура называется vector-sort!:
(vector-sort! proc vector)
, где proc - это процедура, используемая для сравнения двух элементов, а vector - вектор, который нужно отсортировать.
Таким образом, если вы определите:
(define (compare list1 list2)
(< (length list1) (length list2)))
Вы можете сортировать его таким образом
(vector-sort! compare vector)