; list swap (define (swap k xs) (if (< k 1) (error 'swap "don't be silly") (let ((s #\space) (nl #\newline)) (let loop1 ((n 1) (kth #f) (n-k 0) (qs xs) (ys xs) (zs (list))) (for-each display `("loop1 " ,n ,s ,kth ,s ,n-k ,s ,qs ,s ,ys ,s ,zs ,nl)) (cond ((= k n) (if (null? ys) (error 'swap "k too big") (loop1 (+ n 1) (car ys) 1 xs (cdr ys) (cons (car ys) zs)))) ((pair? ys) (loop1 (+ n 1) kth (+ n-k 1) (cdr qs) (cdr ys) (cons (car ys) zs))) ((< n k) (error 'swap "k too big")) (else (let loop2 ((i 1) (zs zs) (ys (list))) (for-each display `("loop2 " ,i ,s ,zs ,s ,ys ,nl)) (cond ((= i k) (loop2 (+ i 1) (cdr zs) (cons kth ys))) ((= i n-k) (loop2 (+ i 1) (cdr zs) (cons (car qs) ys))) ((pair? zs) (loop2 (+ i 1) (cdr zs) (cons (car zs) ys))) (else ys))))))))) (display (swap 1 '(1 2 3 4 5 6 7))) (newline) (display (swap 2 '(1 2 3 4 5 6 7))) (newline) (display (swap 3 '(1 2 3 4 5 6 7))) (newline) (display (swap 4 '(1 2 3 4 5 6 7))) (newline) (display (swap 5 '(1 2 3 4 5 6 7))) (newline) (display (swap 6 '(1 2 3 4 5 6 7))) (newline) (display (swap 7 '(1 2 3 4 5 6 7))) (newline) (newline) (newline) (define (swap k xs) (if (< k 1) (error 'swap "don't be silly") (let loop ((n 1) (ps xs) (qs xs) (ys xs)) (display n) (display " ") (display ps) (display " ") (display qs) (display " ") (display ys) (newline) (cond ((= k n) (if (null? ys) (error 'swap "k too big") (loop (+ n 1) ys xs (cdr ys)))) ((pair? ys) (loop (+ n 1) ps (cdr qs) (cdr ys))) ((< n k) (error 'swap "k too big")) (else (let ((t (car ps))) (set-car! ps (car qs)) (set-car! qs t)) xs))))) (display (swap 1 '(1 2 3 4 5 6 7))) (newline) (display (swap 2 '(1 2 3 4 5 6 7))) (newline) (display (swap 3 '(1 2 3 4 5 6 7))) (newline) (display (swap 4 '(1 2 3 4 5 6 7))) (newline) (display (swap 5 '(1 2 3 4 5 6 7))) (newline) (display (swap 6 '(1 2 3 4 5 6 7))) (newline) (display (swap 7 '(1 2 3 4 5 6 7))) (newline)
Standard input is empty
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)