Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define uprosc
- (lambda (w)
- (cond
- ((not (pair? w))
- w)
- ((equal? (cadr w) '+)
- (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
- (cond
- ((equal? wl 0) wr)
- ((equal? wr 0) wl)
- ((and (number? wr) (number? wl)) (+ wl wr))
- (else (list wl '+ wr)))))
- ((equal? (cadr w) '-)
- (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
- (cond
- ((equal? wr 0) wl)
- ((and (number? wr) (number? wl)) (- wl wr))
- (else (list wl '- wr)))))
- ((equal? (cadr w) '*)
- (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
- (cond
- ((equal? wl 0) 0)
- ((equal? wr 0) 0)
- ((equal? wl 1) wr)
- ((equal? wr 1) wl)
- ((and (number? wr) (number? wl)) (* wl wr))
- (else (list wl '* wr)))))
- ((equal? (cadr w) '/)
- (let ((wl (uprosc (car w))) (wr (uprosc (caddr w))))
- (cond
- ((equal? wl 0) 0)
- ((equal? wr 1) wl)
- ((and (number? wr) (number? wl)) (/ wl wr))
- (else (list wl '/ wr)))))
- (else w))))
- (define pochodna
- (lambda (w x)
- (uprosc
- (cond
- ((equal? w x)
- 1)
- ((not (pair? w))
- 0)
- ((equal? (cadr w) '+)
- (list
- (pochodna (car w) x)
- '+
- (pochodna (caddr w) x)))
- ((equal? (cadr w) '-)
- (list
- (pochodna (car w) x)
- '-
- (pochodna (caddr w) x)))
- ((equal? (cadr w) '*)
- (list
- (list
- (pochodna (car w) x)
- '*
- (caddr w))
- '+
- (list
- (car w)
- '*
- (pochodna (caddr w) x))))
- ((equal? (cadr w) '/)
- (list
- (list
- (list
- (pochodna (car w) x)
- '*
- (caddr w))
- '-
- (list
- (car w)
- '*
- (pochodna (caddr w) x)))
- '/
- (list
- (caddr w)
- '*
- (caddr w))))
- (else 'error)))))
- (pochodna '((x + a) * (x + b)) 'x)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement