(define-library (csc list) (export intercalate revappend split-at take) (import (scheme base) (only (csc match) match)) (begin (define (take n xs) (let loop ((n n) (xs xs) (acc '())) (if (or (not (positive? n)) (null? xs)) (reverse acc) (loop (- n 1) (cdr xs) (cons (car xs) acc))))) (define (split-at n xs) (let loop ((n n) (xs xs) (acc '())) (if (or (not (positive? n)) (null? xs)) (values (reverse acc) xs) (loop (- n 1) (cdr xs) (cons (car xs) acc))))) (define (revappend a b) (let loop ((xs a) (acc b)) (if (null? xs) acc (loop (cdr xs) (cons (car xs) acc))))) (define (intercalate x l) (match l ('() '()) ((_) l) ((head . tail) (cons head (cons x (intercalate x tail))))))))