#!/usr/bin/ruby

#
## https://rosettacode.org/wiki/Permutations
#

func permutations(callback, set, perm=[]) {
    set.len == 0 && callback(perm);
    for i in range(set.len) {
        __FUNC__(callback, [set[(0 ..^ i)..., (i+1 ..^ set.len)...]], [perm..., set[i]]);
    }
};

var list = [1,2,3];
permutations({|set| say set.join}, list);