aboutsummaryrefslogtreecommitdiff
path: root/scheme/utils.scm
diff options
context:
space:
mode:
Diffstat (limited to 'scheme/utils.scm')
-rw-r--r--scheme/utils.scm22
1 files changed, 22 insertions, 0 deletions
diff --git a/scheme/utils.scm b/scheme/utils.scm
new file mode 100644
index 0000000..6ba98cd
--- /dev/null
+++ b/scheme/utils.scm
@@ -0,0 +1,22 @@
+(define fold
+ (lambda (f acc xs)
+ (if (null? xs)
+ acc
+ (fold f (f acc (car xs)) (cdr xs)))))
+
+(define sum
+ (lambda (xs) (fold + 0 xs)))
+
+(define range
+ (lambda (start stop step)
+ (if (>= start stop)
+ '()
+ (cons start (range (+ start step) stop step)))))
+
+(define filter
+ (lambda (predicate xs)
+ (if (null? xs)
+ '()
+ (let* ((x (car xs))
+ (filtered (filter predicate (cdr xs))))
+ (if (predicate x) (cons x filtered) filtered)))))