
Create a program to continually calculate and output the next decimal digit of   



π


{\displaystyle \pi }

   (pi).

The program should continue forever (until it is aborted by the user) calculating and outputting each decimal digit in succession.

The output should be a decimal sequence beginning   3.14159265 ...



Note: this task is about   calculating   pi.   For information on built-in pi constants see Real constants and functions.



Related Task Arithmetic-geometric mean/Calculate Pi

 
(import (rnrs))
 
(define (calc-pi 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 (* q  10)
                (* 10 (- r (* n t)))
                t
                k
                (- (div (* 10 (+ (* 3 q) r)) t) (* 10 n))
                l))
        (begin
          (loop (* q k)
                (* (+ (* 2 q) r) l)
                (* t l)
                (+ k 1)
                (div (+ (* q (* 7 k)) 2 (* r l)) (* t l))
                (+ l 2))))))
 
(let ((i 0))
  (calc-pi
    (lambda (d)
      (display d)
      (set! i (+ i 1))
      (if (= 40 i)
          (begin
            (newline)
            (set! i 0))))))
 