Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 1.88 KB | None | 0 0
  1. (define eval-arith
  2.   '(let (member?
  3.          (lambda-rec (member-in-list? e list)
  4.                      (cond
  5.                        [(my-null? list ) false]
  6.                        [(eq? e (car list)) true]
  7.                        [true (member-in-list? e (cdr list))])))
  8.  
  9.      (let
  10.          (length
  11.           (lambda-rec (lenght list)
  12.                       (if (my-null? list)
  13.                           0
  14.                           (+ 1 (len (cdr list))))))
  15.        (let
  16.            (is-list?
  17.             (lambda-rec (is-list? list)
  18.                         (or (my-null? list)
  19.                             (and (pair? list)
  20.                                  (is-list? (cdr list))))))
  21.          
  22.          (let
  23.              (binop?
  24.               (lambda (e)
  25.                 (and (is-list? e)
  26.                      (and (= (length e) 3)
  27.                           (member? (car e) (cons-cons '+ (cons-cons '- (cons-cons '* (cons-cons '/ null)))))))))
  28.            
  29.            (let (binop-op (lambda (t) (car t)))
  30.              (let (binop-left (lambda (t) (car (cdr t))))
  31.                (let (binop-right (lambda (t) (car (cdr (cdr t)))))
  32.                  (let (op->proc (lambda (op)
  33.                                   (cond ((eq? op '+) (lambda (x y) (+ x y)))
  34.                                         ((eq? op '-) (lambda (x y) (- x y)))
  35.                                         ((eq? op '*) (lambda (x y) (* x y)))
  36.                                         ((eq? op '/) (lambda (x y) (/ x y))))))
  37.                    (lambda-rec (eval e)
  38.                                (cond ((number? e) e)
  39.                                      ((binop? e)
  40.                                       ((op->proc (binop-op e))
  41.                                        (eval (binop-left e))
  42.                                        (eval (binop-right e)))))))))))))))
  43.  
  44. (define (eval-arithmetic expr)
  45.   (eval (list eval-arith expr)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement