Advertisement
Guest User

Untitled

a guest
Mar 12th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 3.13 KB | None | 0 0
  1. (define uprosc
  2.     (lambda (w)
  3.         (cond
  4.             ((not (pair? w))
  5.                 w)
  6.             ((equal? (cadr w) '+)
  7.                 (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
  8.                     (cond
  9.                         ((equal? wl 0) wr)
  10.                         ((equal? wr 0) wl)
  11.                         ((and (number? wr) (number? wl)) (+ wl wr))
  12.                         (else (list wl '+ wr)))))
  13.             ((equal? (cadr w) '-)
  14.                 (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
  15.                     (cond
  16.                         ((equal? wr 0) wl)
  17.                         ((and (number? wr) (number? wl)) (- wl wr))
  18.                         (else (list wl '- wr)))))
  19.             ((equal? (cadr w) '*)
  20.                 (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
  21.                     (cond
  22.                         ((equal? wl 0) 0)
  23.                         ((equal? wr 0) 0)
  24.                         ((equal? wl 1) wr)
  25.                         ((equal? wr 1) wl)
  26.                         ((and (number? wr) (number? wl)) (* wl wr))
  27.                         (else (list wl '* wr)))))
  28.             ((equal? (cadr w) '/)
  29.                 (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
  30.                     (cond
  31.                         ((equal? wl 0) 0)
  32.                         ((equal? wr 1) wl)
  33.                         ((and (number? wr) (number? wl)) (/ wl wr))
  34.                         (else (list wl '/ wr)))))
  35.             (else w))))
  36.  
  37. (define pochodna
  38.     (lambda (w x)
  39.         (uprosc
  40.             (cond
  41.                 ((equal? w x)
  42.                     1)
  43.                 ((not (pair? w))
  44.                     0)
  45.                 ((equal? (cadr w) '+)
  46.                     (list
  47.                         (pochodna (car w) x)
  48.                         '+
  49.                         (pochodna (caddr w) x)))
  50.                 ((equal? (cadr w) '-)
  51.                     (list
  52.                         (pochodna (car w) x)
  53.                         '-
  54.                         (pochodna (caddr w) x)))
  55.                 ((equal? (cadr w) '*)
  56.                     (list
  57.                         (list
  58.                             (pochodna (car w) x)
  59.                             '*
  60.                             (caddr w))
  61.                         '+
  62.                         (list
  63.                             (car w)
  64.                             '*
  65.                             (pochodna (caddr w) x))))
  66.                 ((equal? (cadr w) '/)
  67.                     (list
  68.                         (list
  69.                             (list
  70.                                 (pochodna (car w) x)
  71.                                 '*
  72.                                 (caddr w))
  73.                             '-
  74.                             (list
  75.                                 (car w)
  76.                                 '*
  77.                                 (pochodna (caddr w) x)))
  78.                         '/
  79.                         (list
  80.                             (caddr w)
  81.                             '*
  82.                             (caddr w))))
  83.                 (else 'error)))))
  84.  
  85. (pochodna '((x + a) * (x + b)) 'x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement