Advertisement
Guest User

Untitled

a guest
Apr 21st, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  1. (eval '(let (oper->proc (lambda (op) (cond [(eq? op (quote add)) +]
  2. [(eq? op (quote sub)) -]
  3. [(eq? op (quote mul)) *]
  4. [(eq? op (quote div)) /])))
  5. (let (binop-op (lambda (e) (car e)))
  6. (let (binop-left (lambda (e) (car (cdr e))))
  7. (let (binop-rght (lambda (e) (car (cdr (cdr e)))))
  8. (let (eval-arith (lambda-rec (evall expr)
  9. (cond
  10. [(pair? expr) (cond [(eq? (binop-op expr) (quote add)) ((oper->proc (binop-op expr)) (evall (binop-left expr)) (evall (binop-rght expr)))]
  11. [(eq? (binop-op expr) (quote sub)) (- (evall (binop-left expr)) (evall (binop-rght expr)))]
  12. [(eq? (binop-op expr) (quote mul)) (* (evall (binop-left expr)) (evall (binop-rght expr)))]
  13. [(eq? (binop-op expr) (quote div)) (/ (evall (binop-left expr)) (evall (binop-rght expr)))]
  14. )]
  15. [true expr])))
  16. (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