Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (derivative xs)
- (cond ((equal? xs 'x) 1)
- ((number? xs) 0)
- ((equal? (car xs) 'expt)
- (cond
- ((equal? (cadr xs) 'x )
- (let* ((arg (cadr xs)) (pow (caddr xs)))
- (list '* pow (list 'expt arg (- pow 1)))))
- ((and (number? (cadr xs)) (equal? (caddr xs) 'x))
- (let* ((arg (cadr xs)) (pow (caddr xs)))
- (list '* (list 'expt arg pow) (list 'log arg))))
- ((number? (cadr xs))
- (let* ((arg (cadr xs)) (pow (caddr xs)))
- (list '* (list 'expt arg pow) (list 'log arg) (derivative arg))))
- ((and (not (number? (cadr xs))) (not (equal? (cadr xs) 'exp)))
- (let* ((arg (cadr xs)) (pow (caddr xs)))
- (list '* pow (list 'expt arg (- pow 1)) (derivative arg))))))
- ((equal? (car xs) 'sin) (list '* (list 'cos (cadr xs)) (derivative (cadr xs))))
- ((equal? (car xs) 'cos) (list '- (list '* (list 'sin (cadr xs)) (derivative (cadr xs)))))
- ((equal? (car xs) '*)
- (cond
- ((and (number? (cadr xs)) (equal? (caddr xs) 'x)) (cadr xs))
- ((and (number? (cadr xs)) (not (> (length xs) 3))) (list '* (cadr xs) (derivative (caddr xs))))
- ((and (number? (cadr xs)) (number? (caddr xs))) 0)
- ((> (length xs) 3)
- (list '+ (list '* (derivative (cadr xs)) (caddr xs) (cadddr xs)) (list '* (cadr xs) (derivative (caddr xs)) (cadddr xs))
- (list '* (cadr xs) (caddr xs) (derivative (cadddr xs)))))
- (else
- (list '+ (list '* (derivative (cadr xs)) (caddr xs)) (list '* (cadr xs) (derivative (caddr xs)))))))
- ((equal? (car xs) '+) (list '+ (derivative (cadr xs)) (derivative (caddr xs))))
- ((equal? (car xs) '-)
- (if (not (equal? (length xs) 3))
- -1
- (list '- (derivative (cadr xs)) (derivative (caddr xs)))))
- ((equal? (car xs) '/)
- (cond
- ((and (number? (cadr xs)) (equal? (caddr xs) 'x)) (list '* '-1 (list '/ (cadr xs) (list 'expt (caddr xs) '2))))
- ((number? (cadr xs)) (list '* '-1 (list '/ (cadr xs) (list 'expt (caddr xs) '2)) (derivative (caddr xs))))
- ((and (number? (cadr xs)) (number? (caddr xs))) 0 )
- (else
- (list '/ (list '- (list '* (derivative (cadr xs)) (caddr xs)) (list '* (cadr xs) (derivative (caddr xs)))) (list 'expt (caddr xs) 2)))))
- ((and (equal? (cadr xs) 'x) (equal? (car xs) 'exp)) (list 'exp 'x))
- ((and (equal? (car xs) 'exp) (not (number? (cadr xs)))) (list '* (list 'exp (cadr xs)) (derivative (cadr xs))))
- ((and (equal? (car xs) 'exp) (number? (cadr xs))) 0)
- ((and (equal? (car xs) 'log) (equal? (cadr xs) 'x)) (list '/ 1 (cadr xs)))
- ((and (equal? (car xs) 'log) (number? (cadr xs))) 0)
- ((and (equal? (car xs) 'log) (not (number? (cadr xs)))) (list '* (list '/ 1 (cadr xs)) (derivative (cadr xs))))))
- (begin (define x 2.0) (round (eval (derivative (quote (* 2 (* (exp x) (sin x) (cos x))))) (interaction-environment))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement