2021 fall cs61a dis 11

网址 https://inst.eecs.berkeley.edu/~cs61a/fa21/disc/disc11/#q1-using-pair

problem1:

probelm2:

    def calc_eval(exp):
        if isinstance(exp, Pair): # Call expressions
            return calc_apply(calc_eval(exp.first), exp.rest.map(calc_eval))
        elif exp in OPERATORS:      # Names
            return OPERATORS[exp]
        else:                       # Numbers
            return exp
    def floor_div(expr):
        "*** YOUR CODE HERE ***"
        divident = expr.first
        expr = expr.rest
        while expr.rest != nil:
            divisor = expr.first
            dividend //= divisor
            expr = expr.rest
        return dividend

probelm3:

    def calc_eval(exp):
        if isinstance(exp, Pair):
            if exp.first == 'and': # and expressions
                return eval_and(exp.rest)
            else:                   # Call expressions
                return calc_apply(calc_eval(exp.first), exp.rest.map(calc_eval))
        elif exp in OPERATORS:      # Names
            return OPERATORS[exp]
        else:                       # Numbers
            return exp

    def eval_and(operands):
        curr, val = operands, True
        while curr is not nil:
            val = calc_eval(curr.first)
            if val is False:
                return False
            curr = curr.rest
        return val

probelm4:

    bindings = {}
    def calc_eval(exp):
        if isinstance(exp, Pair):
            if exp.first == 'and': # and expressions[paste your answer from the earlier]
                return eval_and(exp.rest)
            elif exp.first == 'define': # define expressions
                return eval_define(exp.rest)

            else:                   # Call expressions
                return calc_apply(calc_eval(exp.first), exp.rest.map(calc_eval))
        elif exp in bindings: # Looking up variables
            "*** YOUR CODE HERE ***"
            return bindings[exp]
        elif exp in OPERATORS:      # Looking up procedures
            return OPERATORS[exp]
        else:                       # Numbers
            return exp

    def eval_define(expr):
       bindings[expr.first] = expr.rest.first
       return expt.first

probelm5:

problem6:

posted @ 2022-04-20 21:37  天然气之子  阅读(614)  评论(3编辑  收藏  举报