function sum_perms(n, m) { if (m == 1) { yield [n] } else if (n == 0) { yield new int[m] } else { for (i : n..0) { for (rest : sum_perms(n - i, m - 1)) { yield [i] + rest } } } } function main(args) { if (args.length == 2) { n, m = project(args, function(o) { int(o) }) } else { n, m = [5, 3] } for (t : sum_perms(n, m)) { println(join(' ', t)) } } main($args[1..])