code: def unit_clause_assign(clause, model):
      
      P, value = None, None
      for literal in disjuncts(clause):
          sym, positive = inspect_literal(literal)
          if sym in model:
              if model[sym] == positive:
                  return None, None  # clause already True
          elif P:
              return None, None      # more than 1 unbound variable
          else:
              P, value = sym, positive
      return P, value
docs: Return a single variable/value pair that makes clause true in
      the model, if possible.
      >>> unit_clause_assign(A|B|C, {A:True})
      (None, None)
      >>> unit_clause_assign(B|~C, {A:True})
      (None, None)
      >>> unit_clause_assign(~A|~B, {A:True})
      (B, False)