If you systematically apply cps and then accumulator transformations, you get this:
(define (pi3 accuracy) (let helper ((k 0)) (let ((this (formula k))) (if (< (abs this) accuracy) this (+ this (helper (+ k 1))))))) (pi3 .1) (define (pi3-cps accuracy) (let helper ((k 0) (c (lambda (x) x))) (let ((this (formula k))) (if (< (abs this) accuracy) (c this) (helper (+ k 1) (lambda (v) (c (+ this v)))))))) (pi3-cps .1) (define (pi3-accu accuracy) (let helper ((k 0) (c 0)) (let ((this (formula k))) (if (< (abs this) accuracy) (+ c this) (helper (+ k 1) (+ c this)))))) (pi3-accu .1) Now when you compare the result of that with yours: (define (pi4 accuracy) (let helper ((k 1) (this (formula 0))) (if (< (abs this) accuracy) this (helper (+ k 1) (+ this (formula k)))))) you immediately see why yours fails. ;; --- I would worry about accuracy because you are switching the direction of addition when you apply the accu transform, but perhaps you know why this doesn't matter for your context. ____________________ Racket Users list: http://lists.racket-lang.org/users