Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (eval '(let (oper->proc (lambda (op) (cond [(eq? op (quote add)) +]
- [(eq? op (quote sub)) -]
- [(eq? op (quote mul)) *]
- [(eq? op (quote div)) /])))
- (let (binop-op (lambda (e) (car e)))
- (let (binop-left (lambda (e) (car (cdr e))))
- (let (binop-rght (lambda (e) (car (cdr (cdr e)))))
- (let (eval-arith (lambda-rec (evall expr)
- (cond
- [(pair? expr) (cond [(eq? (binop-op expr) (quote add)) ((oper->proc (binop-op expr)) (evall (binop-left expr)) (evall (binop-rght expr)))]
- [(eq? (binop-op expr) (quote sub)) (- (evall (binop-left expr)) (evall (binop-rght expr)))]
- [(eq? (binop-op expr) (quote mul)) (* (evall (binop-left expr)) (evall (binop-rght expr)))]
- [(eq? (binop-op expr) (quote div)) (/ (evall (binop-left expr)) (evall (binop-rght expr)))]
- )]
- [true expr])))
- (eval-arith (cons (quote add) (cons (cons (quote add) (cons 2 (cons 4 null))) (cons (cons (quote add) (cons 2 (cons 4 null))) null))))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement