; squares of a sorted array
(define (square x) (* x x))
(display (sort (map square '(-4 -1 0 3 10)) <)) (newline)
(define (sq-sort xv)
(let loop ((lo 0) (hi (- (vector-length xv) 1)) (xs (list)))
(if (= lo hi) (cons (square (vector-ref xv lo)) xs)
(if (< (abs (vector-ref xv lo)) (abs (vector-ref xv hi)))
(loop lo (- hi 1) (cons (square (vector-ref xv hi)) xs))
(loop (+ lo 1) hi (cons (square (vector-ref xv lo)) xs))))))
(display (sq-sort '#(-4 -1 0 3 10))) (newline)
OyBzcXVhcmVzIG9mIGEgc29ydGVkIGFycmF5CgooZGVmaW5lIChzcXVhcmUgeCkgKCogeCB4KSkKCihkaXNwbGF5IChzb3J0IChtYXAgc3F1YXJlICcoLTQgLTEgMCAzIDEwKSkgPCkpIChuZXdsaW5lKQoKKGRlZmluZSAoc3Etc29ydCB4dikKICAobGV0IGxvb3AgKChsbyAwKSAoaGkgKC0gKHZlY3Rvci1sZW5ndGggeHYpIDEpKSAoeHMgKGxpc3QpKSkKICAgIChpZiAoPSBsbyBoaSkgKGNvbnMgKHNxdWFyZSAodmVjdG9yLXJlZiB4diBsbykpIHhzKQogICAgICAoaWYgKDwgKGFicyAodmVjdG9yLXJlZiB4diBsbykpIChhYnMgKHZlY3Rvci1yZWYgeHYgaGkpKSkKICAgICAgICAgIChsb29wIGxvICgtIGhpIDEpIChjb25zIChzcXVhcmUgKHZlY3Rvci1yZWYgeHYgaGkpKSB4cykpCiAgICAgICAgICAobG9vcCAoKyBsbyAxKSBoaSAoY29ucyAoc3F1YXJlICh2ZWN0b3ItcmVmIHh2IGxvKSkgeHMpKSkpKSkKCihkaXNwbGF5ICAoc3Etc29ydCAnIygtNCAtMSAwIDMgMTApKSkgKG5ld2xpbmUp