fork download
  1. ; three list manipulation exercises
  2.  
  3. (define (split n xs)
  4. (let loop ((n n) (xs xs) (zs '()))
  5. (if (or (zero? n) (null? xs))
  6. (values (reverse zs) xs)
  7. (loop (- n 1) (cdr xs) (cons (car xs) zs)))))
  8.  
  9. (define xs '(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20))
  10.  
  11. (define (task1 xs) (filter even? xs))
  12.  
  13. (display (task1 xs)) (newline)
  14.  
  15. (define (task2 n xs)
  16. (let loop ((xs xs) (k 1) (zs (list)))
  17. (if (null? xs) (reverse zs)
  18. (if (= k n) (loop (cdr xs) 1 zs)
  19. (loop (cdr xs) (+ k 1) (cons (car xs) zs))))))
  20.  
  21. (display (task2 3 xs)) (newline)
  22.  
  23. (define (task3 xs)
  24. (call-with-values
  25. (lambda () (split (quotient (length xs) 2) xs))
  26. (lambda (front back) (append back front))))
  27.  
  28. (display (task3 xs)) (newline)
Success #stdin #stdout 0.01s 8672KB
stdin
Standard input is empty
stdout
(2 4 6 8 10 12 14 16 18 20)
(1 2 4 5 7 8 10 11 13 14 16 17 19 20)
(11 12 13 14 15 16 17 18 19 20 1 2 3 4 5 6 7 8 9 10)