+(define (drop n xs)
+ (case n
+ [(0) xs]
+ [else (drop (- n 1) (cdr xs))]))
+
+(define (drop-end n xs)
+ (reverse (drop n (reverse xs))))
+
+(define (range s n)
+ (if (= 0 n) '()
+ (append (range s (- n 1))
+ (list (+ s (- n 1))))))
+
+(define (flat-map f . xs) (fold-left append '() (apply map (cons f xs))))
+(define (repeat x n) (if (<= n 0) '()
+ (cons x (repeat x (- n 1)))))
+
+
+(define-syntax push!
+ (syntax-rules ()
+ ((_ s x) (set! s (cons x s)))))
+
+(define-syntax pop!
+ (syntax-rules ()
+ ((_ s) (let ([x (car s)])
+ (set! s (cdr s))
+ x))))