aboutsummaryrefslogtreecommitdiff
path: root/scheme/utils.scm
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2021-07-27 11:37:47 +0200
committerCharles Cabergs <me@cacharle.xyz>2021-07-27 11:37:47 +0200
commit726c5ce4decbcd354aff50d1a486bca8c2fa33c1 (patch)
treee96850f51e63789d6dcba3470de1258ec9a6232b /scheme/utils.scm
parenta13cc209e002a72a18c659d22ed39dbd99be2fcd (diff)
downloadproject_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.tar.gz
project_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.tar.bz2
project_euler-726c5ce4decbcd354aff50d1a486bca8c2fa33c1.zip
problem 1 2 in scheme
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)))))