picrin/etc/R7RS/src/primes.sch

46 lines
1.1 KiB
Scheme

;;; PRIMES -- Compute primes less than 100, written by Eric Mohr.
(import (scheme base)
(scheme read)
(scheme write))
(define div quotient)
(define mod modulo)
(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-r7rs-benchmark
(string-append name ":" s1 ":" s2)
count
(lambda () (primes<= (hide count input1)))
(lambda (result) (equal? result output)))))
(include "src/common.sch")