示例#1
0
文件: lisp.py 项目: nyuichi/NLisp
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
示例#2
0
文件: lisp.py 项目: nyuichi/NLisp
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)