fork download
  1. ; list swap
  2.  
  3. (define (swap k xs)
  4. (if (< k 1) (error 'swap "don't be silly")
  5. (let ((s #\space) (nl #\newline))
  6. (let loop1 ((n 1) (kth #f) (n-k 0) (qs xs) (ys xs) (zs (list)))
  7. (for-each display `("loop1 " ,n ,s ,kth ,s ,n-k ,s ,qs ,s ,ys ,s ,zs ,nl))
  8. (cond ((= k n) (if (null? ys) (error 'swap "k too big")
  9. (loop1 (+ n 1) (car ys) 1 xs (cdr ys) (cons (car ys) zs))))
  10. ((pair? ys) (loop1 (+ n 1) kth (+ n-k 1) (cdr qs) (cdr ys) (cons (car ys) zs)))
  11. ((< n k) (error 'swap "k too big"))
  12. (else (let loop2 ((i 1) (zs zs) (ys (list)))
  13. (for-each display `("loop2 " ,i ,s ,zs ,s ,ys ,nl))
  14. (cond ((= i k) (loop2 (+ i 1) (cdr zs) (cons kth ys)))
  15. ((= i n-k) (loop2 (+ i 1) (cdr zs) (cons (car qs) ys)))
  16. ((pair? zs) (loop2 (+ i 1) (cdr zs) (cons (car zs) ys)))
  17. (else ys)))))))))
  18.  
  19. (display (swap 1 '(1 2 3 4 5 6 7))) (newline)
  20. (display (swap 2 '(1 2 3 4 5 6 7))) (newline)
  21. (display (swap 3 '(1 2 3 4 5 6 7))) (newline)
  22. (display (swap 4 '(1 2 3 4 5 6 7))) (newline)
  23. (display (swap 5 '(1 2 3 4 5 6 7))) (newline)
  24. (display (swap 6 '(1 2 3 4 5 6 7))) (newline)
  25. (display (swap 7 '(1 2 3 4 5 6 7))) (newline)
  26.  
  27. (newline) (newline)
  28.  
  29. (define (swap k xs)
  30. (if (< k 1) (error 'swap "don't be silly")
  31. (let loop ((n 1) (ps xs) (qs xs) (ys xs))
  32. (display n) (display " ") (display ps) (display " ")
  33. (display qs) (display " ") (display ys) (newline)
  34. (cond ((= k n) (if (null? ys) (error 'swap "k too big")
  35. (loop (+ n 1) ys xs (cdr ys))))
  36. ((pair? ys) (loop (+ n 1) ps (cdr qs) (cdr ys)))
  37. ((< n k) (error 'swap "k too big"))
  38. (else (let ((t (car ps)))
  39. (set-car! ps (car qs))
  40. (set-car! qs t))
  41. xs)))))
  42.  
  43. (display (swap 1 '(1 2 3 4 5 6 7))) (newline)
  44. (display (swap 2 '(1 2 3 4 5 6 7))) (newline)
  45. (display (swap 3 '(1 2 3 4 5 6 7))) (newline)
  46. (display (swap 4 '(1 2 3 4 5 6 7))) (newline)
  47. (display (swap 5 '(1 2 3 4 5 6 7))) (newline)
  48. (display (swap 6 '(1 2 3 4 5 6 7))) (newline)
  49. (display (swap 7 '(1 2 3 4 5 6 7))) (newline)
Success #stdin #stdout 0.02s 8800KB
stdin
Standard input is empty
stdout
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 1 1 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 1 2 (2 3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 1 3 (3 4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 1 4 (4 5 6 7) (5 6 7) (4 3 2 1)
loop1 6 1 5 (5 6 7) (6 7) (5 4 3 2 1)
loop1 7 1 6 (6 7) (7) (6 5 4 3 2 1)
loop1 8 1 7 (7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (1)
loop2 3 (5 4 3 2 1) (6 1)
loop2 4 (4 3 2 1) (5 6 1)
loop2 5 (3 2 1) (4 5 6 1)
loop2 6 (2 1) (3 4 5 6 1)
loop2 7 (1) (2 3 4 5 6 1)
loop2 8 () (7 2 3 4 5 6 1)
(7 2 3 4 5 6 1)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 2 1 (1 2 3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 2 2 (2 3 4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 2 3 (3 4 5 6 7) (5 6 7) (4 3 2 1)
loop1 6 2 4 (4 5 6 7) (6 7) (5 4 3 2 1)
loop1 7 2 5 (5 6 7) (7) (6 5 4 3 2 1)
loop1 8 2 6 (6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (7)
loop2 3 (5 4 3 2 1) (2 7)
loop2 4 (4 3 2 1) (5 2 7)
loop2 5 (3 2 1) (4 5 2 7)
loop2 6 (2 1) (3 4 5 2 7)
loop2 7 (1) (6 3 4 5 2 7)
loop2 8 () (1 6 3 4 5 2 7)
(1 6 3 4 5 2 7)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 #f 2 (3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 3 1 (1 2 3 4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 3 2 (2 3 4 5 6 7) (5 6 7) (4 3 2 1)
loop1 6 3 3 (3 4 5 6 7) (6 7) (5 4 3 2 1)
loop1 7 3 4 (4 5 6 7) (7) (6 5 4 3 2 1)
loop1 8 3 5 (5 6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (7)
loop2 3 (5 4 3 2 1) (6 7)
loop2 4 (4 3 2 1) (3 6 7)
loop2 5 (3 2 1) (4 3 6 7)
loop2 6 (2 1) (5 4 3 6 7)
loop2 7 (1) (2 5 4 3 6 7)
loop2 8 () (1 2 5 4 3 6 7)
(1 2 5 4 3 6 7)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 #f 2 (3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 #f 3 (4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 4 1 (1 2 3 4 5 6 7) (5 6 7) (4 3 2 1)
loop1 6 4 2 (2 3 4 5 6 7) (6 7) (5 4 3 2 1)
loop1 7 4 3 (3 4 5 6 7) (7) (6 5 4 3 2 1)
loop1 8 4 4 (4 5 6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (7)
loop2 3 (5 4 3 2 1) (6 7)
loop2 4 (4 3 2 1) (5 6 7)
loop2 5 (3 2 1) (4 5 6 7)
loop2 6 (2 1) (3 4 5 6 7)
loop2 7 (1) (2 3 4 5 6 7)
loop2 8 () (1 2 3 4 5 6 7)
(1 2 3 4 5 6 7)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 #f 2 (3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 #f 3 (4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 #f 4 (5 6 7) (5 6 7) (4 3 2 1)
loop1 6 5 1 (1 2 3 4 5 6 7) (6 7) (5 4 3 2 1)
loop1 7 5 2 (2 3 4 5 6 7) (7) (6 5 4 3 2 1)
loop1 8 5 3 (3 4 5 6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (7)
loop2 3 (5 4 3 2 1) (6 7)
loop2 4 (4 3 2 1) (3 6 7)
loop2 5 (3 2 1) (4 3 6 7)
loop2 6 (2 1) (5 4 3 6 7)
loop2 7 (1) (2 5 4 3 6 7)
loop2 8 () (1 2 5 4 3 6 7)
(1 2 5 4 3 6 7)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 #f 2 (3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 #f 3 (4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 #f 4 (5 6 7) (5 6 7) (4 3 2 1)
loop1 6 #f 5 (6 7) (6 7) (5 4 3 2 1)
loop1 7 6 1 (1 2 3 4 5 6 7) (7) (6 5 4 3 2 1)
loop1 8 6 2 (2 3 4 5 6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (7)
loop2 3 (5 4 3 2 1) (2 7)
loop2 4 (4 3 2 1) (5 2 7)
loop2 5 (3 2 1) (4 5 2 7)
loop2 6 (2 1) (3 4 5 2 7)
loop2 7 (1) (6 3 4 5 2 7)
loop2 8 () (1 6 3 4 5 2 7)
(1 6 3 4 5 2 7)
loop1 1 #f 0 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) ()
loop1 2 #f 1 (2 3 4 5 6 7) (2 3 4 5 6 7) (1)
loop1 3 #f 2 (3 4 5 6 7) (3 4 5 6 7) (2 1)
loop1 4 #f 3 (4 5 6 7) (4 5 6 7) (3 2 1)
loop1 5 #f 4 (5 6 7) (5 6 7) (4 3 2 1)
loop1 6 #f 5 (6 7) (6 7) (5 4 3 2 1)
loop1 7 #f 6 (7) (7) (6 5 4 3 2 1)
loop1 8 7 1 (1 2 3 4 5 6 7) () (7 6 5 4 3 2 1)
loop2 1 (7 6 5 4 3 2 1) ()
loop2 2 (6 5 4 3 2 1) (1)
loop2 3 (5 4 3 2 1) (6 1)
loop2 4 (4 3 2 1) (5 6 1)
loop2 5 (3 2 1) (4 5 6 1)
loop2 6 (2 1) (3 4 5 6 1)
loop2 7 (1) (2 3 4 5 6 1)
loop2 8 () (7 2 3 4 5 6 1)
(7 2 3 4 5 6 1)


1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (3 4 5 6 7)
4 (1 2 3 4 5 6 7) (3 4 5 6 7) (4 5 6 7)
5 (1 2 3 4 5 6 7) (4 5 6 7) (5 6 7)
6 (1 2 3 4 5 6 7) (5 6 7) (6 7)
7 (1 2 3 4 5 6 7) (6 7) (7)
8 (1 2 3 4 5 6 7) (7) ()
(7 2 3 4 5 6 1)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (2 3 4 5 6 7) (1 2 3 4 5 6 7) (3 4 5 6 7)
4 (2 3 4 5 6 7) (2 3 4 5 6 7) (4 5 6 7)
5 (2 3 4 5 6 7) (3 4 5 6 7) (5 6 7)
6 (2 3 4 5 6 7) (4 5 6 7) (6 7)
7 (2 3 4 5 6 7) (5 6 7) (7)
8 (2 3 4 5 6 7) (6 7) ()
(1 6 3 4 5 2 7)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (3 4 5 6 7) (3 4 5 6 7)
4 (3 4 5 6 7) (1 2 3 4 5 6 7) (4 5 6 7)
5 (3 4 5 6 7) (2 3 4 5 6 7) (5 6 7)
6 (3 4 5 6 7) (3 4 5 6 7) (6 7)
7 (3 4 5 6 7) (4 5 6 7) (7)
8 (3 4 5 6 7) (5 6 7) ()
(1 2 5 4 3 6 7)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (3 4 5 6 7) (3 4 5 6 7)
4 (1 2 3 4 5 6 7) (4 5 6 7) (4 5 6 7)
5 (4 5 6 7) (1 2 3 4 5 6 7) (5 6 7)
6 (4 5 6 7) (2 3 4 5 6 7) (6 7)
7 (4 5 6 7) (3 4 5 6 7) (7)
8 (4 5 6 7) (4 5 6 7) ()
(1 2 3 4 5 6 7)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (3 4 5 6 7) (3 4 5 6 7)
4 (1 2 3 4 5 6 7) (4 5 6 7) (4 5 6 7)
5 (1 2 3 4 5 6 7) (5 6 7) (5 6 7)
6 (5 6 7) (1 2 3 4 5 6 7) (6 7)
7 (5 6 7) (2 3 4 5 6 7) (7)
8 (5 6 7) (3 4 5 6 7) ()
(1 2 5 4 3 6 7)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (3 4 5 6 7) (3 4 5 6 7)
4 (1 2 3 4 5 6 7) (4 5 6 7) (4 5 6 7)
5 (1 2 3 4 5 6 7) (5 6 7) (5 6 7)
6 (1 2 3 4 5 6 7) (6 7) (6 7)
7 (6 7) (1 2 3 4 5 6 7) (7)
8 (6 7) (2 3 4 5 6 7) ()
(1 6 3 4 5 2 7)
1 (1 2 3 4 5 6 7) (1 2 3 4 5 6 7) (1 2 3 4 5 6 7)
2 (1 2 3 4 5 6 7) (2 3 4 5 6 7) (2 3 4 5 6 7)
3 (1 2 3 4 5 6 7) (3 4 5 6 7) (3 4 5 6 7)
4 (1 2 3 4 5 6 7) (4 5 6 7) (4 5 6 7)
5 (1 2 3 4 5 6 7) (5 6 7) (5 6 7)
6 (1 2 3 4 5 6 7) (6 7) (6 7)
7 (1 2 3 4 5 6 7) (7) (7)
8 (7) (1 2 3 4 5 6 7) ()
(7 2 3 4 5 6 1)