use v6; sub gen_combine(@ops) { return -> Pair $x, Pair $y { $y.key == 0 ?? Nil !! @ops.map: {;.key.($x.key,$y.key) => "($x.value() $_.value() $y.value())"}; } } my $c = gen_combine((&infix:<*> => "*", &infix: => "/", &infix:<%> => "%", &infix:<+> => "+")); sub infix: {$c($^a,$^b)}; my @combinations := ({-9=>"(-9)",9=>"9"},{},{},{}); for 0..2 -> $n { for 0..$n -> $i { for (@combinations[$i] Xc @combinations[$n-$i]) -> $x { @combinations[$n+1]{$x.key} = $x.value; } } } sub MAIN(Int $n) { for (^($n+1)) Z @combinations[3]{^($n+1)} -> $v,$t { say $v ~ ($t[0].defined ?? " = $t[0]"!!""); } }