Advertisement
Guest User

Racket

a guest
Jun 1st, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.60 KB | None | 0 0
  1.  
  2. ;
  3. ;   *************    SIMPLIFY    **********
  4. ;
  5.  
  6. (define (simplify e rs)
  7.   (if (pair? e)
  8.       (rewrite (simplify-subexpr e rs) rs)
  9.       (rewrite e rs)))
  10.  
  11. (define (simplify-subexpr es rs)
  12.   (if (not (null? es))
  13.       (cons (simplify (car es) rs) (simplify-subexpr (cdr es) rs))
  14.       `()))
  15.  
  16. (define (rewrite e rs)
  17.   (define mresult 0)
  18.   (if (not (null? rs))
  19.       (begin
  20.         (set! mresult (match e (caar rs) `()))
  21.         (if (not (equal? `fail mresult))
  22.             (substitude (cdar rs) mresult)
  23.             (rewrite e (cdr rs))))
  24.       e))
  25.  
  26. (define (substitude rr mlist)
  27.   (if (pair? rr)
  28.       (cons (substitude (car rr) mlist) (substitude (cdr rr) mlist))
  29.       (if (is-var? rr)
  30.           (replace rr mlist)
  31.           rr)))
  32.  
  33. (define (replace v mlist)
  34.   (if (equal? v (caar mlist))
  35.       (cdar mlist)
  36.       (replace v (cdr mlist))))
  37.  
  38. (define (match e lr mlist)
  39.   (if (equal? mlist `fail)
  40.       `fail
  41.       (if (pair? lr)
  42.           (if (pair? e)
  43.               (match (cdr e) (cdr lr) (match (car e) (car lr) mlist))
  44.               `fail)
  45.           (if (is-var? lr)
  46.               (if (on-mlist lr mlist)
  47.                   (if (equal? (replace lr mlist) e)
  48.                       mlist
  49.                       `fail)
  50.                   (cons (cons lr e) mlist))
  51.               (if (equal? lr e)
  52.                   mlist
  53.                   `fail)))))
  54.  
  55. (define (on-mlist v mlist)
  56.   (if (null? mlist)
  57.       #f
  58.       (if (equal? v (caar mlist))
  59.           #t
  60.           (on-mlist v (cdr mlist)))))
  61.  
  62. (define (is-var? t)
  63.   (and (not (pair? t)) (not (number? t))))
  64.    
  65.  
  66. (simplify (devir
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement