Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;;; wersja binarna
- (define (add-expr? e)
- (and (list? e)
- (= (length e) 3)
- (eq? (car e) '+)))
- (define (const? e)
- (number? e))
- (define (add-left e)
- (second e))
- (define (add-right e)
- (third e))
- (define (add-op e)
- (first e))
- (define (op->proc o)
- (if (eq? o '+)
- +
- (error "WRONG OPERATOR -- ADD-EXPR" o)))
- (define (eval e)
- (cond [(const? e) e]
- [(add-expr? e)
- ((op->proc (add-op e))
- (eval (add-left e))
- (eval (add-right e)))]))
- ;;; wersja na listach
- (define (add-inf-expr? e)
- (and (list? e)
- (eq? (car e) '+)))
- (define (add-inf-op e)
- (first e))
- (define (add-inf-args e)
- (cdr e))
- (define (eval-inf e)
- (cond [(const? e) e]
- [(add-inf-expr? e)
- (apply
- (op->proc (add-inf-op e))
- (map eval-inf (add-inf-args e)))]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement