;;; -*-Scheme-*-

(define (identity value) value)

(define (gcd a b) (cps-gcd a b identity))

(define (cps-gcd a b k)
  (if (= b 0)
      (k a)
      (cps-remainder a b (lambda (v) (cps-gcd b v k)))))

(define (cps-remainder n d k)
  (if (< n d)
      (k n)
      (cps-remainder (- n d) d k)))

(print (gcd 4 6))