(bind-func vquicksort
(lambda (buf:double* left right)
(if (< left right)
(let ((tmp 0.0)
(_swap (lambdas (x y)
(set! tmp (pref buf x))
(pset! buf x (pref buf y))
(pset! buf y tmp)))
(pivot (pref buf right))
(index left)
(i 0))
(dotimes (i left (- right left))
(if (or (< (pref buf i) pivot)
(= (pref buf i) pivot))
(begin (_swap i index)
(set! index (+ index 1)))))
(_swap right index)
(vquicksort buf left (- index 1))
(vquicksort buf (+ index 1) right))
void)))