4 (require "readline.rkt" "types.rkt" "reader.rkt" "printer.rkt"
12 (define (eval-ast ast env)
14 [(symbol? ast) (send env get ast)]
15 [(_sequential? ast) (_map (lambda (x) (EVAL x env)) ast)]
16 [(hash? ast) (make-hash
17 (dict-map ast (lambda (k v) (cons k (EVAL v env)))))]
20 (define (EVAL ast env)
24 (let ([a0 (_nth ast 0)])
27 (send env set (_nth ast 1) (EVAL (_nth ast 2) env))]
29 (let ([let-env (new Env% [outer env] [binds null] [exprs null])])
31 (send let-env set (_first b_e)
32 (EVAL (_nth b_e 1) let-env)))
33 (_partition 2 (_to_list (_nth ast 1))))
34 (EVAL (_nth ast 2) let-env))]
35 [else (let* ([el (eval-ast ast env)]
49 [exprs (list + - * /)]))
51 (PRINT (EVAL (READ str) repl-env)))
54 (let ([line (readline "user> ")])
55 (when (not (eq? nil line))
57 ([string? (lambda (exc) (printf "Error: ~a~n" exc))]
58 [blank-exn? (lambda (exc) null)])
59 (printf "~a~n" (rep line)))