#!/usr/bin/ruby
#
## https://rosettacode.org/wiki/Permutations
#
func permute (code, arr) {
var idx = arr.keys;
while (true) {
code(arr.items(idx...));
var p = idx.end;
while (idx[p - 1] > idx[p]) { --p };
p == 0 && return();
idx += idx.splice(p).reverse;
var d = p;
while (idx[p - 1] > idx[d]) { ++d };
idx[p-1, d] = idx[d, p-1];
}
}
var name = %c"abc";
permute(func (list) { list.join(' ').say }, name);