def eval(self, env, symbols): leq = [self.fun] req = map(lambda x: [x], self.args) env.envClosure(leq) map(lambda x: env.envClosure(x), req) rc = self.combinations(req) for l in leq: for r in rc: result = self.evalHelper(env, symbols, l, r) if result: return result return "undefined"
def eval(self, env, symbols): result = Subscript(None) result.lhs = self.lhs.eval(env, symbols) result.rhs = self.rhs.eval(env, symbols) l = symbol.List(None) l.arg = result.lhs leq = [l] req = [result.rhs] env.envClosure(leq) env.envClosure(req) for r in req: if isinstance(r, Num): for l in leq: if isinstance(l, Concat): if r.val < len(l.elements): return l.elements[r.val] else: return "subscript out of range" #TODO subscripts into constraints return result