;;; PRIMES -- Compute primes less than 100, written by Eric Mohr. (import (rnrs base) (rnrs io simple)) (define (interval-list m n) (if (> m n) '() (cons m (interval-list (+ 1 m) n)))) (define (sieve l) (letrec ((remove-multiples (lambda (n l) (if (null? l) '() (if (= (mod (car l) n) 0) (remove-multiples n (cdr l)) (cons (car l) (remove-multiples n (cdr l)))))))) (if (null? l) '() (cons (car l) (sieve (remove-multiples (car l) (cdr l))))))) (define (primes<= n) (sieve (interval-list 2 n))) (define (main) (let* ((count (read)) (input1 (read)) (output (read)) (s2 (number->string count)) (s1 (number->string input1)) (name "primes")) (run-r6rs-benchmark (string-append name ":" s1 ":" s2) count (lambda () (primes<= (hide count input1))) (lambda (result) (equal? result output)))))