From 148112e6e375c79aab7bf0456de1474410533762 Mon Sep 17 00:00:00 2001 From: Jed Barber Date: Mon, 19 Oct 2015 14:37:52 +1100 Subject: Euler prime number sieve --- sieve/euler.scm | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 sieve/euler.scm diff --git a/sieve/euler.scm b/sieve/euler.scm new file mode 100644 index 0000000..b3ba946 --- /dev/null +++ b/sieve/euler.scm @@ -0,0 +1,35 @@ + + + +(use-modules (srfi srfi-41)) + + + +(define base (stream-from 2)) + + + +(define (curry f) + (lambda (x) + (lambda (y) + (f x y)))) + + + +(define-stream (sub-merge x y) + (if (eq? (stream-car x) (stream-car y)) + (sub-merge (stream-cdr x) (stream-cdr y)) + (stream-cons (stream-car x) (sub-merge (stream-cdr x) y)))) + + +(define-stream (sieve input) + (stream-cons + (stream-car input) + (sieve (sub-merge (stream-cdr input) + (stream-map ((curry *) (stream-car input)) input))))) + + + +(define euler (sieve base)) + + -- cgit