diff options
author | Jed Barber <jjbarber@y7mail.com> | 2015-10-25 12:36:33 +1100 |
---|---|---|
committer | Jed Barber <jjbarber@y7mail.com> | 2015-10-25 12:36:33 +1100 |
commit | 0f9a7c7fb9d8f1c4fda02e325771ce7b3f75c637 (patch) | |
tree | 73a6540811c071ddf649ec1bd601a4ead5f7fbd6 /sieve/my-streams.scm | |
parent | 0a48ed023ea65d75851ba2a4151100602695a2fd (diff) |
Factored out common scheme code into modules
Diffstat (limited to 'sieve/my-streams.scm')
-rw-r--r-- | sieve/my-streams.scm | 26 |
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))))))))) + + + +) |