С языком Схемы, как проверить, является ли функция экспоненциальной
Это не должно быть так сложно, но я застрял. У нас есть простое назначение, в котором мы пишем, как получить производную функции.
(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 ответа
Прошло довольно много времени, так как я сделал схему. Я больше знаком с 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, вы также можете просто нажать вкладку, и она выстроит все в ряд соответственно, но это не исправит наличие нескольких вещей в одной строке.
В любом случае, эта проблема во многом зависит от того, как назначено задание и какой вклад вы ожидаете получить. Вы можете использовать теги, или вы можете просто проверить, есть ли что-то в области экспоненты, или это даже просто 0 или 1. Опять же, хотя это полностью зависит от того, как вводится информация.