def read_number(self, reader): chars = [] while self.is_number(reader.current()) or \ reader.current() == '.' or \ reader.current() == '-': chars.append(reader.current()) reader.next() str = "".join(chars) if str == "-": return Symbol.from_string(str) if '.' in str: return FloatObj(float(str)) return IntObj(int(str))
def init_vars(): from clojure.lang.var import Var conslist = Var(Symbol.from_string("cons_list*"), Cons_List())
def is_builtin(self): return BoolObj(True) def evaluate(self): return self def invoke2(self, arg0, arg1): val = arg1.evaluate() return Var(arg0, val) class Recur(Obj): def __init__(self): pass def is_builtin(self): return BoolObj(True) def evaluate(self): return self def apply(self, args): nlist = [] while args is not None: nlist.append(args.first().evaluate()) args = args.rest() _RecurInfo.set_recur(List.from_list(nlist)) return None recur = Var(Symbol.from_string("recur"), Recur()) d = Var(Symbol.from_string("def"), Def()) fn = Var(Symbol.from_string("fn"), Fn()) ifsym = Var(Symbol.from_string("if"), If())
from clojure.lang.var import Var from clojure.lang.symbol import Symbol from clojure.lang.primitives import Obj, IntObj from clojure.lang.afn import AFn class Add(AFn): def __init__(self): pass def evaluate(self): return self def invoke2(self, arg0, arg1): return IntObj(arg0.int_value() + arg1.int_value()) add = Var(Symbol.from_string("+"), Add()) class Sub(AFn): def __init__(self): pass def evaluate(self): return self def invoke2(self, arg0, arg1): return IntObj(arg0.int_value() - arg1.int_value()) sub = Var(Symbol.from_string("-"), Sub()) class Equals(AFn): def __init__(self): pass def evaluate(self): return self