1

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

(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 的内容。整个事情有点混乱。那不是给定的代码。我猜 car 和 cdr 目前有点像占位符。

4

2 回答 2

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))))
于 2012-11-02T19:19:30.827 回答
1

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

无论如何,这个问题在很大程度上取决于分配的设置方式以及您期望采用的输入类型。您可以使用标签,或者您可以检查指数点是否有任何东西,或者它是否只是 0 或 1。同样,尽管它完全取决于输入的方式。

于 2012-11-04T16:16:35.897 回答