#!/usr/bin/ruby func permutations(callback, arr) { var end = arr.end; var idx = arr.indices; loop { callback([arr[idx]]); var p = end; while (idx[p-1] > idx[p]) {p--}; p == 0 && return(); var d = p; idx += idx.splice(p).reverse; while (idx[p-1] > idx[d]) {d++}; idx[p-1, d] = idx[d, p-1]; } } var list = [1,2,3]; permutations({|set| say set.join }, list);