Selects a single clause, if possible, or otherwise reduces the list of selectable clauses. The input is a list Clauses of abstract clauses (i.e., syntax trees of type clause), and a list of switch expressions Exprs. The function tries to uniquely select a single clause or discard unselectable clauses, with respect to the switch expressions. All abstract clauses in the list must have the same number of patterns. If Exprs is not the empty list, it must have the same length as the number of patterns in each clause; see match_list/2 for details.
A clause can only be selected if its guard expression always yields the atom true, and a clause whose guard expression always yields the atom false can never be selected. Other guard expressions are considered to have unknown value; cf. eval_guard/1.
If a particular clause can be selected, the function returns {true, {Clause, Bindings}}, where Clause is the selected clause and Bindings is a list of pairs {Var, SubExpr} associating the variables occurring in the patterns of Clause with the corresponding subexpressions in Exprs. The list of bindings is given in innermost-first order; see the match/2 function for details.
If no clause could be definitely selected, the function returns {false, NewClauses}, where NewClauses is the list of entries in Clauses that remain after eliminating unselectable clauses, preserving the relative order.
See also: eval_guard/1, match/2, match_list/2.