Advertisement
Guest User

INTERPRETER

a guest
Jun 15th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 0.89 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;;; wersja binarna
  4.  
  5. (define (add-expr? e)
  6.   (and (list? e)
  7.        (= (length e) 3)
  8.        (eq? (car e) '+)))
  9.  
  10. (define (const? e)
  11.   (number? e))
  12.  
  13. (define (add-left e)
  14.   (second e))
  15.  
  16. (define (add-right e)
  17.   (third e))
  18.  
  19. (define (add-op e)
  20.   (first e))
  21.  
  22. (define (op->proc o)
  23.   (if (eq? o '+)
  24.       +
  25.       (error "WRONG OPERATOR -- ADD-EXPR" o)))
  26.  
  27. (define (eval e)
  28.   (cond [(const? e) e]
  29.         [(add-expr? e)
  30.          ((op->proc (add-op e))
  31.           (eval (add-left e))
  32.           (eval (add-right e)))]))
  33.  
  34.  
  35. ;;; wersja na listach
  36.  
  37. (define (add-inf-expr? e)
  38.   (and (list? e)
  39.        (eq? (car e) '+)))
  40.  
  41. (define (add-inf-op e)
  42.   (first e))
  43.  
  44. (define (add-inf-args e)
  45.   (cdr e))
  46.  
  47. (define (eval-inf e)
  48.   (cond [(const? e) e]
  49.         [(add-inf-expr? e)
  50.          (apply
  51.           (op->proc (add-inf-op e))
  52.           (map eval-inf (add-inf-args e)))]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement