[ create a new paste ] login | about

Project: programmingpraxis
Link: http://programmingpraxis.codepad.org/9VS3QBWC    [ raw code | output | fork ]

programmingpraxis - Scheme, pasted on Aug 25:
; 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)


Output:
1
2
3
4
5
(1 2 3 4 5 6)
(2 1 4 3 6 5)
(3 2 1 6 5 4)
(4 3 2 1 6 5)
(6 5 4 3 2 1)


Create a new paste based on this one


Comments: