Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;evaluate
- (define (evaluate exp)
- (cond ((number? exp) exp)
- (else (if (or (null? exp) (and (symbol? exp) (not (or (equal? exp `+) (equal? exp `-) (equal? exp `*) (equal? exp `/))))) "undefined"
- (if (list? (car exp)) (evaluate (multi-replace (car exp) (car (cdr exp))))
- (if (equal? (car exp) `+) (add (evaluate (car (cdr exp))) (evaluate (car (cdr (cdr exp)))))
- (if (equal? (car exp) `-) (minus (evaluate (car (cdr exp))) (evaluate (car (cdr (cdr exp)))))
- (if (equal? (car exp) `*) (multiply (evaluate (car (cdr exp))) (evaluate (car (cdr (cdr exp)))))
- (if (equal? (car exp) `/) (divide (evaluate (car (cdr exp))) (evaluate (car (cdr (cdr exp)))))
- "undefined")))))))))
- (define (add x y)
- (cond ((or (equal? "undefined" x) (equal? "undefined" y)) "undefined")
- (else (+ x y))))
- (define (minus x y)
- (cond ((or (equal? "undefined" x) (equal? "undefined" y)) "undefined")
- (else (- x y))))
- (define (divide x y)
- (cond ((or (equal? "undefined" x) (equal? "undefined" y)) "undefined")
- (else (/ x y))))
- (define (multiply x y)
- (cond ((or (equal? "undefined" x) (equal? "undefined" y)) "undefined")
- (else (* x y))))
- (define (multi-replace x y)
- (cond ((null? x) y)
- (else (multi-replace (cdr x) (replace-helper (car x) y)))))
- (define (replace-helper e exp)
- (list-replace exp (car e) (car (cdr e))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement