Since it has been claimed that 6.001 doesn't use for loops, a generic function that can simulate "for", used in 6.001, called "accumulate", written in Scheme:
(define accumulate
  (lambda (initval argextract nextval termfunc termval function accumulator basecase)
     (let ((arg (argextract initval))
           (nextarg (nextval initval)))
       (if (termfunc termval arg)
         (accumulator (function arg) basecase)
         (accumulator (function arg)
            (accumulate nextarg argextract nextval termval function accumulator basecase))))))

(define (for a b func)
   (accumulate a (lambda (x) x) inc = b func (lambda (x y) #t) #t))

Note that this would have been more clean with a helper function.