; division by repeated subtraction

(define (divide n d)
  (if (< n d)
      0
      (+ (divide (- n d) d) 1)))

(display (divide 29 4)) (newline)

(define (divide n d)
  (define (divide-helper q r)
    (if (< r d)
        (values q r)
        (divide-helper (+ q 1) (- r d))))
  (divide-helper 0 n))

(call-with-values
  (lambda () (divide 29 4))
  (lambda (q r)
    (display q) (newline)
    (display r) (newline)))