summaryrefslogtreecommitdiff
path: root/sieve/my-streams.scm
diff options
context:
space:
mode:
authorJed Barber <jjbarber@y7mail.com>2015-10-25 12:36:33 +1100
committerJed Barber <jjbarber@y7mail.com>2015-10-25 12:36:33 +1100
commit0f9a7c7fb9d8f1c4fda02e325771ce7b3f75c637 (patch)
tree73a6540811c071ddf649ec1bd601a4ead5f7fbd6 /sieve/my-streams.scm
parent0a48ed023ea65d75851ba2a4151100602695a2fd (diff)
Factored out common scheme code into modules
Diffstat (limited to 'sieve/my-streams.scm')
-rw-r--r--sieve/my-streams.scm26
1 files changed, 26 insertions, 0 deletions
diff --git a/sieve/my-streams.scm b/sieve/my-streams.scm
new file mode 100644
index 0000000..6c08762
--- /dev/null
+++ b/sieve/my-streams.scm
@@ -0,0 +1,26 @@
+
+(library (my-streams)
+ (export stream-ordered-diff stream-merge)
+ (import (rnrs base) (srfi srfi-41))
+
+
+
+(define-stream (stream-ordered-diff xstrm ystrm)
+ (stream-match xstrm (() '()) ((x . xs)
+ (stream-match ystrm (() xstrm) ((y . ys)
+ (cond ((< x y) (stream-cons x (stream-ordered-diff xs ystrm)))
+ ((> x y) (stream-ordered-diff xstrm ys))
+ (else (stream-ordered-diff xs ys))))))))
+
+
+
+(define-stream (stream-merge xstrm ystrm)
+ (stream-match xstrm (() ystrm) ((x . xs)
+ (stream-match ystrm (() xstrm) ((y . ys)
+ (cond ((< x y) (stream-cons x (stream-merge xs ystrm)))
+ ((> x y) (stream-cons y (stream-merge xstrm ys)))
+ (else (stream-cons x (stream-merge xs ys)))))))))
+
+
+
+)