rev_splitlist : ('a -> 'a * 'b) -> 'a -> 'a * 'b list
rev_splitlist d f(...(f(f(w,x1),x2),...xn)
(w,[x1; ... ; xn])
# rev_splitlist dest_comb `x + 1 + 2`;; val it : term * term list = (`(+)`, [`x`; `1 + 2`])