Racket 球拍-以指数为基础,不相乘

Racket 球拍-以指数为基础,不相乘,racket,Racket,我正试图完成一个问题,它要求我编写一个函数,使它使用两个自然数base和expt,并生成expt的base。然而,唯一允许的内置算术函数是函数add1和sub1。 如何使用递归和辅助函数实现这一点 例如: (check-expect (exponent-without-mult 3 3) 27) 重复添加“添加1”: 乘法是重复加法: (define (nat* nat1 nat2) (cond [(zero? nat1) 0] [(positive? nat1) (nat

我正试图完成一个问题,它要求我编写一个函数,使它使用两个自然数base和expt,并生成expt的base。然而,唯一允许的内置算术函数是函数add1和sub1。 如何使用递归和辅助函数实现这一点

例如:

(check-expect (exponent-without-mult 3 3) 27)
重复添加“添加1”:

乘法是重复加法:

(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)))]))

首先,您可以使用自己的加法构造自己的乘法函数,而加法又可以使用
add1
sub1
构造。
(define (nat^ nat1 nat2)
  (cond
    [(zero? nat2) 1]
    [(positive? nat1) (nat* nat1 (nat^ nat1 (sub1 nat2)))]))