Advertisement
Guest User

Untitled

a guest
Apr 14th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.33 KB | None | 0 0
  1. #lang racket
  2.  
  3. (struct const    (val)      #:transparent)
  4. (struct op       (symb l r) #:transparent)
  5. (struct variable (x)        #:transparent)
  6. (struct df       (f)      #:transparent)
  7.  
  8.  
  9. (define (f)
  10.   (match f
  11.     [(const n)   (const 0)]
  12.     [(variable x)  (const 1)]
  13.     [(op '+ f g) (op '+ (f) (∂ g))]
  14.     [(op '* f g) (op '+ (op '* (f) g)
  15.                         (op '* f (∂ g)))]))
  16.  
  17.  
  18.  
  19. (define (eval e val)
  20.   (match e
  21.     [(const n) n]
  22.     [(variable x) val]
  23.     [(op '+ l r) (+ (eval l val) (eval r val))]
  24.     [(op '* l r) (* (eval l val) (eval r val))]
  25.     [(df '∂ f) (eval (f) val)]
  26.     ))
  27.  
  28. (define (expr? e)
  29.   (match e
  30.     [(const n) (number? n)]
  31.     [(variable x) (symbol? x)]
  32.     [(df ∂ f) (and (eq? ∂ '∂) (expr? f))]
  33.    
  34.     [(op s l r) (and (member s '(+ *))
  35.                      (expr? l)
  36.                      (expr? r))]
  37.     [_ false]))
  38.  
  39.  
  40. (define e1 (op '* (op '+ (const 2) (const 2))
  41.                   (const 2)))
  42.  
  43. (define x 3)
  44.  
  45. (define e2 (df '∂ (op '* (variable x) (variable x))))
  46.  
  47. (define e3 (op '+ (op '* (variable x) (const 2)) (df '∂ (op '+ (op '* (variable x) (variable x))
  48.                                                            (variable x)))))
  49.  
  50. (set! x 5)
  51.  
  52. (define e4 (op '+ (const 2) (variable x)))
  53.  
  54. (eval e1 1)
  55. (eval e2 1)
  56. (eval e3 1)
  57. (eval e4 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement