Move utils into its onw file
[scheme.git] / utils.scm
diff --git a/utils.scm b/utils.scm
new file mode 100644 (file)
index 0000000..e063b85
--- /dev/null
+++ b/utils.scm
@@ -0,0 +1,27 @@
+(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))))