this trivial, , have solution i'm not happy it. somehow, (much) simpler forms don't seem work , gets messy around corner cases (either first, or last matching pairs in row). to keep simple, let's define matching rule any 2 or more numbers have difference of two . example: > filtertwins [1; 2; 4; 6; 8; 10; 15; 17] val : int list = [2; 4; 6; 8; 10; 15; 17] the code use this, feels sloppy , overweight: let filtertwins list = let func item acc = let previtem, resultlist = acc match previtem, resultlist | 0, [] -> item, [] | var, [] when var - 2 = item -> item, item::var::resultlist | var, hd::tl when var - 2 = item && hd <> var -> item, item::var::resultlist | var, _ when var - 2 = item -> item, item::resultlist | _ -> item, resultlist list.foldback func list (0, []) |> snd i intended own original ex...