All pastes #907849 Raw Edit

Untitled

public text v1 · immutable
·published 2008-02-17 22:50 UTC
rendered paste body
(define (eval xval code)
  (cond
    [(number? code) code]
    [(symbol? code) xval]
    [(cons? code)
      (cond
        [(symbol=? (first code) '+) (+ (eval xval (second code)) (eval xval (third code)))]
        [(symbol=? (first code) '-) (- (eval xval (second code)) (eval xval (third code)))]
        [(symbol=? (first code) '*) (* (eval xval (second code)) (eval xval (third code)))]
        [(symbol=? (first code) '/) (/ (eval xval (second code)) (eval xval (third code)))]
      )
    ]
    [else "Idiot programmer passed illegal code: must be number, symbol, or list."]
  )
)

; evaluating a number (x ignored)
(eval 1 5) ; => 5
; evaluating x
(eval 1 'x) ; => 1
; evaluating a list
(eval 1 '(+ x 5)) ; => 6
(eval 1 '(- x 1)) ; => 0
; evaluating nested lists
(eval 1 '(/ (+ x 3) 2)) ; => 2
; evaluating complete nonsense
(eval 0 #\a) ; => insulting error message