def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ operator = self.operator.eval(env) operands = [op.eval(env) for op in self.operands] return operator.apply(operands)
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({"a": Number(1), "b": Number(2)}) >>> add = CallExpr(Name("add"), [Literal(3), Name("a")]) >>> add.eval(new_env) Number(4) >>> new_env["a"] = Number(5) >>> add.eval(new_env) Number(8) >>> read("max(b, a, 4, -1)").eval(new_env) Number(5) >>> read("add(mul(3, 4), b)").eval(new_env) Number(14) """ "*** YOUR CODE HERE ***" operator = self.operator.eval(env) operands = [arg.eval(env) for arg in self.operands] return operator.apply(operands)
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ operator = self.operator.eval(env) list = [] for index in range(0, len(self.operands)): list.append(self.operands[index].eval(env)) return operator.apply(list)
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ "*** YOUR CODE HERE ***" try: operator = self.operator.eval(env) operands = [operand.eval(env) for operand in self.operands] return operator.apply(operands) except ZeroDivisionError as e: return 'Error: {0}!'.format(e)
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ "*** YOUR CODE HERE ***" operands = [element.eval(env) for element in self.operands] operator = Name.eval(self.operator, env) return operator.apply(operands) ...
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ "*** YOUR CODE HERE ***" # 1.Evaluate the operator in the current environment operator = self.operator.eval(env) # 2.Evaluate the operands in the current environment operands = [operand.eval(env) for operand in self.operands] # 3.Apply the value of the operator, a function, to the values of the operand return operator.apply(operands)
def eval(self, env): """ >>> from reader import read >>> new_env = global_env.copy() >>> new_env.update({'a': Number(1), 'b': Number(2)}) >>> add = CallExpr(Name('add'), [Literal(3), Name('a')]) >>> add.eval(new_env) Number(4) >>> new_env['a'] = Number(5) >>> add.eval(new_env) Number(8) >>> read('max(b, a, 4, -1)').eval(new_env) Number(5) >>> read('add(mul(3, 4), b)').eval(new_env) Number(14) """ operator = self.operator.eval(env) operands = [operands.eval(env) for operands in self.operands] if isinstance(operator, LambdaFunction) or isinstance( operator, PrimitiveFunction): return operator.apply(operands) else: return operator.eval(operands)