fork download
  1. ;; (import (chicken sort))
  2.  
  3. (define (mapi f xs)
  4. (define (aux acc i xs)
  5. (if (null? xs)
  6. (reverse acc)
  7. (aux (cons (f i (car xs)) acc) (+ i 1) (cdr xs))))
  8. (aux '() 0 xs))
  9.  
  10. (define mapi_
  11. (lambda (f)
  12. (lambda (xs)
  13. (mapi f xs))))
  14.  
  15. (define sortby_
  16. (lambda (<)
  17. (lambda (keyof)
  18. (lambda (xs)
  19. (sort xs (lambda (a b) (< (keyof a) (keyof b))))))))
  20.  
  21. (define map_
  22. (lambda (f)
  23. (lambda (xs)
  24. (map f xs))))
  25.  
  26. (let* ((sorti (compose (map_ car) ((sortby_ <) cadr) (mapi_ list)))
  27. (f (compose sorti sorti))
  28. (g (compose print f)))
  29. (g '(1 100 10 10000 1000))
  30. (g '(3 1 4 1 5 9 2))
  31. (g '(0 1 0 1 0 1 0 1)))
  32.  
Success #stdin #stdout 0.01s 7772KB
stdin
Standard input is empty
stdout
(0 2 1 4 3)
(3 0 4 1 5 6 2)
(0 4 1 5 2 6 3 7)