Сложение повторяется «добавить 1»:
(define (nat+ nat1 nat2)
(cond
[(zero? nat1) nat2]
[(positive? nat1) (add1 (nat+ (sub1 nat1) nat2))]))
Умножение повторяется сложение:
(define (nat* nat1 nat2)
(cond
[(zero? nat1) 0]
[(positive? nat1) (nat+ (nat* (sub1 nat1) nat2) nat2)]))
Вычисление повторяется умножение:
(define (nat^ nat1 nat2)
(cond
[(zero? nat2) 1]
[(positive? nat1) (nat* nat1 (nat^ nat1 (sub1 nat2)))]))