def run_repl(): print "////////////////////////////////////////////////////////////" print "// アメージング☆エターナルフォースブリザード☆わざびずLisp //" print "//////////////////// Powered by wasabi /////////////////////" print "////////////////////////////////////////////////////////////" print 'Type "(quit)" or "(exit)" to exit interactive mode' print global_env = Env() add_global_functions(global_env) while True: s = raw_input("NLisp >> ") try: for exp in analyzer.get_sexps(s): result = evals(exp, global_env) if result: print result except SystemExit: sys.exit(0) except SyntaxError: print "Syntax Error!" except: print "Rumtime Error!" print "-" * 30 traceback.print_exc(file=sys.stdout) print "-" * 30
def add_standard_functions(env): functions = """ (define (1+ x) (+ x 1)) (define (1- x) (- x 1)) (define (list . x) x) (define (cadr x) (car (cdr x))) (define (cdar x) (cdr (car x))) (define (caar x) (car (car x))) (define (cddr x) (cdr (cdr x))) (define (map f args) (if (null? args) '() (cons (f (car args)) (map f (cdr args))))) (define (filter f args) (if (null? args) '() (if (f (car args)) (cons (car args) (filter f (cdr args))) (filter f (cdr args))))) (define-macro (let let-args . let-body) `((lambda ,(map car let-args) ,@let-body) ,@(map cadr let-args))) """ for exp in analyzer.get_sexps(functions): evals(exp, env)