goof-loop/example.scm
2021-05-11 13:36:05 +02:00

18 lines
548 B
Scheme

(import (goof))
(define (erathostenes n)
(define vec (make-vector n #t))
(loop ((:for i (up-from 2 (:to n)))
(:when (vector-ref vec i))
(:acc lst (listing i))
(:for j (up-from (* 3 i) (:to n) (:by (* i 2)))))
=> lst
(vector-set! vec j #f)))
(define (erathostenes2 n)
(define vec (make-vector n #t))
(loop/list ((:for i (up-from 2 (:to n)))
(:when (vector-ref vec i)))
;; Here we set all multiples of i to #f
(loop ((:for j (up-from (* 3 i) (:to n) (:by (* i 2)))))
(vector-set! vec j #f))
i))