使用Scheme语言,如何检查函数是否呈指数级

时间:2012-11-02 19:07:09

标签: scheme exponentiation

这应该不是这么难,但我被卡住了。我们有一个简单的任务,我们正在编写如何获取函数的导数。

(define (derive exp var)
(cond ((number? exp) 0)
    ((variable? exp) (if (same-variable? exp var) 1 0))
    ((sum? exp) (derive-sum exp var))
    ((product? exp) (derive-product exp var))
    ((exponentiation? exp) (derive-exponentiation exp var))
    (else 'Error)))

但是对于取幂,如果我有一个指数函数,它需要返回true。我只是不完全确定如何写它。到目前为止,我刚刚得到了这样的东西

(define (make-exponentiation base exponent)
   (cons base exponent)

(define (base exponentiation)
   (car exponentiation)

(define (exponent exponentiation)
   'cdr exponentiation)

(define (exponentiation? exp)
   'YourCodeHere)

(define (derive-exponentiation exp var)
   (* var (make-exponentiation exp (var-1)) (derive exp))

我不确定我正在检查汽车和cdr。整件事情有点令人困惑。那不是给定的代码。我猜汽车和cdr目前有点像占位符。

2 个答案:

答案 0 :(得分:3)

这已经有一段时间了,因为我已经完成了计划。我对emacs lisp更熟悉。所以带上一粒盐:

(define (make-exponentiation base exponent)
   (list '^ base exponent))

(define (base exponentiation)
   (car (cdr exponentiation)))

(define (exponent exponentiation)
   (car (cdr (cdr exponentiation))))

(define (exponentiation? exp)
   (equal? (car exp) '^))

(define (derive-exponentiation exp var)
   (let ((b (base exp))
         (e (exponent exp)))
   (make-product e (make-exponentiation b (- e 1))))

答案 1 :(得分:1)

你的代码很难阅读,因为它的格式很奇怪,你应该尝试将不同的东西分成不同的行。如果您正在使用Dr。Racket,您也可以点击Tab,它会相应地排列所有内容,但它不能解决在同一行上有多个问题。

无论如何,这个问题很大程度上取决于如何设置分配以及您希望采取何种输入。您可以使用标签,或者您可以检查指数点中是否有任何内容,或者它是否只是0或1.再次,但它完全取决于输入的给定方式。