J'ai un vecteur, les éléments de chaque vecteur sont une liste, je veux trier les éléments concernant la longueur de la liste. J'utilise ceci pour trier mon vecteur mais je suis l'erreurSchéma vecteur utilisant le tri de fusion
(define vector-merge!
(lambda (newvec vec left group-size vec-size)
(let* ((top-left (min vec-size (+ left group-size)))
(right top-left)
(top-right (min vec-size (+ right group-size))))
(let mergeloop ((left left) (right right) (i left))
(cond ((and (< left top-left) (< right top-right))
(if (< (vector-ref vec left) (vector-ref vec right))
(begin
(vector-set! newvec i (vector-ref vec left))
(mergeloop (add1 left) right (add1 i)))
(begin
(vector-set! newvec i (vector-ref vec right))
(mergeloop left (add1 right) (add1 i)))))
((< left top-left)
(vector-set! newvec i (vector-ref vec left))
(mergeloop (add1 left) right (add1 i)))
((< right top-right)
(vector-set! newvec i (vector-ref vec right))
(mergeloop left (add1 right) (add1 i))))))))
(define vector-mergesort!
(lambda (orig-vec)
(let* ((vec-size (vector-length orig-vec))
(new-vec (make-vector vec-size)))
;; merge with successively larger group sizes
(do ((group-size 1 (* group-size 2)) ;; loop variables
(twice-size 2 (* twice-size 2))
(count 1 (add1 count))
(vec1 orig-vec vec2)
(vec2 new-vec vec1))
((>= group-size vec-size) ;;; exit condition
(if (even? count) ;;; copy to orig-vec, if needed
(do ((i 0 (add1 i))) ;;; this do replaces
((>= i vec-size)) ;;; vector-change!
(vector-set! orig-vec i (vector-ref new-vec i)))))
;; successively merge next two groups
(do ((left 0 (+ left twice-size))) ;; loop variables
((>= left vec-size)) ;; exit when array processed
(vector-merge! vec2 vec1 left group-size vec-size))))))
Error:
<: expects type <real number> as 1st argument, given: ((length (vector-ref route number))); other arguments were: ((length (vector-ref route number)))