; reverse every k nodes of a linked list
(define (take n xs)
(let loop ((n n) (xs xs) (ys '()))
(if (or (zero? n) (null? xs))
(reverse ys)
(loop (- n 1) (cdr xs)
(cons (car xs) ys)))))
(define (drop n xs)
(let loop ((n n) (xs xs))
(if (or (zero? n) (null? xs)) xs
(loop (- n 1) (cdr xs)))))
(define (rev n xs)
(if (null? xs) xs
(append (reverse (take n xs)) (rev n (drop n xs)))))
(display (rev 1 '(1 2 3 4 5 6))) (newline)
(display (rev 2 '(1 2 3 4 5 6))) (newline)
(display (rev 3 '(1 2 3 4 5 6))) (newline)
(display (rev 4 '(1 2 3 4 5 6))) (newline)
(display (rev 6 '(1 2 3 4 5 6))) (newline)