goof-loop/example.scm

19 lines
548 B
Scheme
Raw Permalink Normal View History

2021-05-11 13:36:05 +02:00
(import (goof))
(define (erathostenes n)
(define vec (make-vector n #t))
2021-05-11 13:36:05 +02:00
(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)))
2021-05-11 13:36:05 +02:00
;; 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))