UNB/ CS/ David Bremner/ teaching/ cs4613/ lectures/ lecture3/ snippet-015.rkt
#lang plait
(define (eval sx)
  (let ([rec (lambda (fn)
	      (eval (fn (s-exp->list sx))))])
    (cond
      [(s-exp-match? `NUMBER sx)
       (s-exp->number sx)]
      [(s-exp-match? `(+ ANY ANY) sx)
       (+ (rec second) (rec third))]
      [(s-exp-match? `(- ANY ANY) sx)
       (- (rec second) (rec third))]
      [else (error 'eval (to-string sx))])))

(eval `{+ 1 {- 3 "a"}})