(define (pi-spigot z)
(let loop ((z z) (ds '()) (q 1) (r 0) (t 1) (k 1) (n 3) (m 3))
(cond ((zero? z) (reverse ds))
((< (+ q q q q r (- t)) (* n t))
(loop (- z 1) (cons n ds) (* 10 q) (* 10 (- r (* n t)))
t k (- (quotient (* 10 (+ q q q r)) t) (* 10 n)) m))
(else (loop z ds (* q k) (* (+ q q r) m) (* t m) (+ k 1)
(quotient (+ (* q (+ k k k k k k k 2)) (* r m))
(* t m)) (+ m 2))))))
(display (pi-spigot 1001))