;; Lazy Prime Numbers (module lazy-prime-numbers (lazy-prime-numbers) (import chicken scheme) (use lazy-seq) (define (prime? n) (let loop ((d 2)) (cond ((< n (fx* d d)) #t) ((zero? (fxmod n d)) #f) (else (loop (add1 d)))))) (define lazy-prime-numbers (lazy-filter prime? (lazy-numbers start: 2))) ) ;; SRFI-127 Prime Numbers (module lseq-prime-numbers (lseq-prime-numbers) (import chicken scheme) (use srfi-121 srfi-127) (define (prime? n) (let loop ((d 2)) (cond ((< n (fx* d d)) #t) ((zero? (fxmod n d)) #f) (else (loop (add1 d)))))) (define lseq-prime-numbers (lseq-filter prime? (generator->lseq (make-range-generator 2)))) ) ;;; THE BENCHMARK (use srfi-41 streams-math lazy-seq srfi-127) (import lazy-prime-numbers lseq-prime-numbers) (newline) (print* "first run") (newline) (print* "srfi-41: ") (time (print (stream-car (stream-drop 1000 prime-numbers-stream)))) (newline) (print* "lazy-seq: ") (time (print (lazy-head (lazy-drop 1000 lazy-prime-numbers)))) (newline) (print* "srfi-121: ") (time (print (lseq-car (lseq-drop lseq-prime-numbers 1000)))) (newline) (print* "second run") (newline) (print* "srfi-41: ") (time (print (stream-car (stream-drop 1000 prime-numbers-stream)))) (newline) (print* "lazy-seq: ") (time (print (lazy-head (lazy-drop 1000 lazy-prime-numbers)))) (newline) (print* "srfi-121: ") (time (print (lseq-car (lseq-drop lseq-prime-numbers 1000))))