예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
    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)

        ...
예제 #6
0
 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)
예제 #7
0
파일: expr.py 프로젝트: Gnomeek/CS61Asp18
 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)