#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"}})