使用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,=
仅在数字类型上定义。