fork download
  1. ; inversions
  2.  
  3. (define (inversion lt? base proc xs)
  4. (do ((xs xs (cdr xs))) ((null? (cdr xs)) base)
  5. (do ((ys (cdr xs) (cdr ys))) ((null? ys))
  6. (when (lt? (car ys) (car xs))
  7. (set! base (proc (car xs) (car ys) base))))))
  8.  
  9. (define (inversion-count xs)
  10. (inversion < 0 (lambda (x y base) (+ base 1)) xs))
  11.  
  12. (define (inversion-enumerate xs)
  13. (inversion < (list) (lambda (x y base) (cons (list x y) base)) xs))
  14.  
  15. (define xs '(1 4 3 2 5))
  16. (display (inversion-count xs)) (newline)
  17. (display (inversion-enumerate xs)) (newline)
Success #stdin #stdout 0s 42848KB
stdin
Standard input is empty
stdout
3
((3 2) (4 2) (4 3))