This is probably an inappropriate question, but could someone help me understand what this piece of code does? The inputs are 2 long lists of numbers. Where I get confused is mainly that I have only ever seen functions defined in 1 statement, but here separate seems to be defined in some way that depends on itself?
separate[l1_List, l2_List] /; Length[l1] == Length[l2] :=
separate[Take[l1, 2], Take[l2, 2], Drop[l1, 2], Drop[l2, 2]];
separate[{s1___, a1_, b1_}, {s2___, a2_, b2_}, {n1_, l1___}, {n2_,