12345678910111213141516171819(* Simple combinatorics. *)(* -------------------------------------------------------------------------- *)(* Enumerate all ways of picking n elements from a list (ie all injections
from [n] to [l]) *)letrecenumerate_injectionsnlcurrent_pickacc=ifn=0thenList.revcurrent_pick::accelseenumerate_picksnlcurrent_pickaccandenumerate_picksnlcurrent_pickacc=matchlwith|[]->acc|x::tl->letextended_pick=x::current_pickinletacc=enumerate_injections(n-1)tlextended_pickaccinenumerate_picksntlcurrent_pickaccletenumerate_subsetsnl=enumerate_injectionsnl[][]