(lambda (ls less) (let nm ((ll (map list ls))) (if (pair? ll) (if (pair? (cdr ll)) (nm (let srt ((a ll)) (if (null? a) '() (if (null? (cdr a)) a (cons (let mg ((a (car a))(b (cadr a))) (cond ((null? a) b) ((null? b) a) ((less (car a) (car b)) (cons (car a) (mg (cdr a) b))) (#t (cons (car b) (mg a (cdr b)))))) (srt (cddr a))))))) (car ll)) '()))) ; test (let* ((g (((fileVal "RC4") 'rbi "Seed stuff") (expt 10 9))) (h (((fileVal "Do") 'DoL) (expt 10 6) (lambda (u) (g)))) (s ((fileVal "sort") h <)) (sh (apply + h)) (ss (apply + s))) (list ss (= ss sh) (or (null? s) (let ot ((x s)) (or (null? (cdr x)) (and (<= (car x) (cadr x)) (ot (cdr x)))))))) ; Above took 9 seconds with MzScheme version 352 on one processor of an Intel Duo 2 2.4 GHz.