PasteRack.org
Paste # 9892
2015-01-29 21:04:43

Fork as a new paste.

Paste viewed 66 times.


Embed:

d/dx

  1. #lang racket
  2.  
  3. (define (deriv f)
  4.   (λ(x)(/ (- (f (+ x 0.0001)) (f x)) 0.0001)))
  5.  
  6. (define-syntax-rule (D (var) expr)
  7.   (deriv (λ(var) expr)))
  8.  
  9. (define-syntax (d/d stx)
  10.   (let* ([dat (syntax->datum stx)]
  11.          [expr (cadr dat)]
  12.          [var (caddr dat)])
  13.     (datum->syntax stx `((D (,var) ,expr) ,var))))
  14.  
  15. (define x 3)
  16.  
  17. (d/d (sqr x) x)
  18. (d/d (d/d (sqr x) x) x)
  19. (d/d (d/d (d/d (sqr x) x) x) x)

=>

6.000100000012054

1.999999987845058

0.0