<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def rule(ctxt, name):
 """ Allows evaluation of another rule while evaluating a rule. :param ctxt: The evaluation context for the rule. :param name: The name of the rule to evaluate. """


    # If the result of evaluation is in the rule cache, bypass
    # evaluation
    if name in ctxt.rule_cache:
        ctxt.stack.append(ctxt.rule_cache[name])
        return

    # Obtain the rule we're to evaluate
    try:
        rule = ctxt.policy[name]
    except KeyError:
        # Rule doesn't exist; log a message and assume False
        log = logging.getLogger('policies')
        log.warn("Request to evaluate non-existant rule %r "
                 "while evaluating rule %r" % (name, ctxt.name))
        ctxt.stack.append(False)
        ctxt.rule_cache[name] = False
        return

    # Evaluate the rule, stopping at the set_authz instruction
    with ctxt.push_rule(name):
        rule.instructions(ctxt, True)

    # Cache the result
    ctxt.rule_cache[name] = ctxt.stack[-1]