(make-Env #:binds b #:exprs e)))
(define (READ)
- (read_str (readline "user> ")))
+ (read_str (_readline "user> ")))
(define (eval_ast ast env)
(define (_eval x) (EVAL x env))
(match expr
(((? procedure? proc) args ...)
(apply proc args))
- (else 'mal-error (format #f "'~a' is not a valid form to apply!" expr))))
+ (else (throw 'mal-error (format #f "'~a' not found" (car expr))))))
(define (eval_seq ast env)
(cond
((null? (cdr next)) (throw 'mal-error "let*: Invalid binding form" kvs))
(else (lp (cddr next) (cons (car next) k) (cons (cadr next) v))))))
(match ast
+ (() ast)
(('def! k v) ((env 'set) k (EVAL v env)))
(('let* kvs body)
(let* ((new-env (make-Env #:outer env))
(define (PRINT exp)
(and (not (eof-object? exp))
- ;;(add-history str)
(format #t "~a~%" (pr_str exp #t))))
(define (LOOP continue?)
(catch 'mal-error
(lambda () (PRINT (EVAL (READ) *toplevel*)))
(lambda (k . e)
- (format #t "Error: ~a~%" (car e))))))
+ (if (string=? (car e) "blank line")
+ (display "")
+ (format #t "Error: ~a~%" (car e)))))))
(REPL)