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

使用Scheme语言,如何检查函数是否为指数函数,scheme,exponentiation,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?

这不应该这么难,但我被卡住了。我们有一个简单的赋值,我们写的是如何求函数的导数

(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现在有点像占位符。

这是相当长的一段时间了,因为我已经完成了这个计划。我更熟悉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))))

这是一段相当长的时间,因为我做了这个计划。我更熟悉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))))

您的代码很难阅读,因为它的格式很奇怪,您应该尝试将不同的内容分隔到不同的行中。如果你正在使用Dr.Racket,你也可以点击tab键,它会相应地排列所有东西,但它不会修复在同一条线上有多个东西的问题


无论如何,这个问题在很大程度上取决于作业是如何设置的,以及你希望接受什么样的输入。您可以使用标记,也可以只检查指数点中是否有任何内容,或者它是否仅为0或1。同样,尽管这完全取决于输入的方式。

您的代码很难阅读,因为它的格式很奇怪,但您应该尝试将不同的内容分隔到不同的行中。如果你正在使用Dr.Racket,你也可以点击tab键,它会相应地排列所有东西,但它不会修复在同一条线上有多个东西的问题


无论如何,这个问题在很大程度上取决于作业是如何设置的,以及你希望接受什么样的输入。您可以使用标记,也可以只检查指数点中是否有任何内容,或者它是否仅为0或1。同样,这完全取决于输入的方式。

Oh..Ooh,好的。这实际上更好,因为我们已经有了返回第二项和第三项的函数。非常感谢!我想我明白了。不要用
=
来比较符号。改用
eq?
eqv?
equal?
。IIRC,
=
只在数字类型上定义。哦..哦,好的。这实际上更好,因为我们已经有了返回第二项和第三项的函数。非常感谢!我想我明白了。不要用
=
来比较符号。改用
eq?
eqv?
equal?
。IIRC,
=
仅在数字类型上定义。