С языком Схемы, как проверить, является ли функция экспоненциальной

Это не должно быть так сложно, но я застрял. У нас есть простое назначение, в котором мы пишем, как получить производную функции.

(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. Опять же, хотя это полностью зависит от того, как вводится информация.

Другие вопросы по тегам