Suppose we have n steps left to climb; initially n=1. If n=0 then we are done. Otherwise, we try to call step: if it succeeds then we now have n-1 steps to go; if it fails we have n+1 steps to go. You can implement this with an explicit counter. (define (step-up) (let loop ((n 1)) (cond ((= n 0) #f) ((step) (loop (- n 1))) (else (loop (+ n 1))))))You can also implement this without an explicit counter: (define (step-up) (unless (step) (step-up) (step-up)))The justification is straightforward: if we fall down one step as a result of failure we then have to climb the step we just fell down in addition to the one we originally intended to climb.