Internal Definitions

When a procedure is not generally useful, and written especially for another procedure, it can be made internal to the other procedure. Example:

These two procedures: Can be replaced by one:
 (define factorial
   (lambda (n)
     (factorial-product 1 n)))

 (define factorial-product
   (lambda (a b) 
     (if (= b 0)
         a
         (factorial-product (* a b) (- b 1)))))
 (define factorial
   (lambda (n)
      
     (define factorial-product
       (lambda (a b) 
         (if (= b 0)
             a
             (factorial-product (* a b) (- b 1)))))
      
     (factorial-product 1 n)))