(* q2 *) fun distribute a L = map(cons(a))(L); (* q3 *) fun eltcombos As L = reduce(append,map(fn a => distribute a L)(As),[]); (* q4 *) fun allcombos Ps = reduce(eltcombos,Ps,[[]]); (* q5 *) fun allcombo3 (ones,twos,threes) = map(tuple3)(allcombos([ones,twos,threes]));