;; https://www.gavalas.dev/blog/spigot-algorithms-for-pi-in-python/ (library (pi) (export spigot) (import (rnrs (6))) (define (spigot yield) (let loop ([q 1] [r 0] [t 1] [k 1] [n 3] [l 3]) (if (< (- (+ (* 4 q) r) t) (* n t)) (begin (yield n) (loop (* 10 q) (* 10 (- r (* n t))) t k (- (div (* 10 (+ (* 3 q) r)) t) (* 10 n)) l)) (loop (* q k) (* (+ (* 2 q) r) l) (* t l) (+ k 1) (div (+ (* q (+ (* 7 k) 2)) (* r l)) (* t l)) (+ l 2))))))