(ql:quickload :petalisp) (defun bbp (k) (declare (fixnum k)) (/ (- (/ 4 (+ (* 8 k) 1)) (/ 2 (+ (* 8 k) 4)) (/ 1 (+ (* 8 k) 5)) (/ 1 (+ (* 8 k) 6))) (expt 16 k))) (defvar *pi-size* (ceiling (integer-length (expt 10 10000)) 4) "The number of hexadecimal digits we want to calculate Pi to") (defvar *pi* (petalisp:beta #'+ (petalisp:alpha #'bbp (coerce (loop for x from 0 to *pi-size* collect x) 'vector)))) (defun write-ratio (ratio length) (dotimes (n length) (write-char (digit-char (floor (mod ratio 10)))) (setf ratio (* ratio 10)) (when (zerop (mod n 10)) (fresh-line)))) (time (write-ratio (petalisp:compute *pi*) 10000))