#!/usr/local/bin/guile \
-e main -s
!#
;;; $Id: sieve.guile,v 1.8 2001/06/29 23:12:37 doug Exp $
;;; http://www.bagley.org/~doug/shootout/
;;; with help from Benedikt Rosenau
(use-modules (ice-9 format))
(define (main args)
(let ((n (or (and (= (length args) 2) (string->number (cadr args))) 1))
(count 0))
(while (> n 0)
(set! n (- n 1))
(let ((flags (make-vector 8192 #t)))
(set! count 0)
(do ((i 2 (+ 1 i)))
((>= i 8192))
(if (vector-ref flags i)
(begin
(do ((k (+ i i) (+ k i)))
((>= k 8192))
(vector-set! flags k #f))
(set! count (+ 1 count)))))))
(display (format "Count: ~D\n" count))))