#!/usr/bin/env scheme-script

(import (ikarus) (match))

(define (constant? x)
  (or (number? x) (char? x) (string? x) (boolean? x)))

(define (ee x)
  (define (ee x env)
    (trace-match foo x
      [,c (guard (constant? c)) c]
      [,x (guard (symbol? x))
       (cond
         ((assq x env) => cdr)
         (else (error 'ee "unbound variable" x)))]
      [(let ([,x* ,[v*]] ...) ,b)
       (ee b (append (map cons x* v*) env))]
      [(+ ,[x] ,[y]) (+ x y)]
      [,others (error 'ee "invalid expression" others)]))
  (ee x '()))

(pretty-print 
  (ee '(let ((x 5)) (let ((y (+ x x))) (+ y x)))))

;(new-cafe ee)