macro_rules! reduce { ($a:expr, $b:expr, $c:expr, $d:expr, $( $x:expr ),+ => $fn:path) => { ... }; ($a:expr, $b:expr, $( $x:expr ),+ => $fn:path) => { ... }; ($a:expr, $b:expr => $fn:path) => { ... }; ($a:expr => $fn:path) => { ... }; }